CUGL
Cornell University Game Library
|
#include <CUCapsuleObstacle.h>
Public Types | |
enum | Orientation { Orientation::TOP, Orientation::VERTICAL, Orientation::BOTTOM, Orientation::LEFT, Orientation::HORIZONTAL, Orientation::RIGHT } |
Public Member Functions | |
CapsuleObstacle (void) | |
virtual | ~CapsuleObstacle () |
virtual bool | init () override |
virtual bool | init (const Vec2 &pos) override |
virtual bool | init (const Vec2 &pos, const Size &size) |
virtual bool | init (const Vec2 &pos, const Size &size, Orientation orient) |
const Size & | getDimension () const |
void | setDimension (const Size &value) |
void | setDimension (float width, float height) |
float | getWidth () const |
void | setWidth (float value) |
float | getHeight () const |
void | setHeight (float value) |
const Orientation & | getOrientation () const |
bool | setOrientation (Orientation value) |
void | setSeamOffset (float value) |
float | getSeamOffset () const |
virtual void | setDensity (float value) override |
virtual void | createFixtures () override |
virtual void | releaseFixtures () override |
Public Member Functions inherited from cugl::SimpleObstacle | |
SimpleObstacle () | |
virtual | ~SimpleObstacle () |
virtual b2BodyType | getBodyType () const override |
virtual void | setBodyType (b2BodyType value) override |
virtual Vec2 | getPosition () const override |
virtual void | setPosition (const Vec2 &value) override |
virtual void | setPosition (float x, float y) override |
virtual float | getX () const override |
virtual void | setX (float value) override |
virtual float | getY () const override |
virtual void | setY (float value) override |
virtual float | getAngle () const override |
virtual void | setAngle (float value) override |
virtual Vec2 | getLinearVelocity () const override |
virtual void | setLinearVelocity (const Vec2 &value) override |
virtual void | setLinearVelocity (float x, float y) override |
virtual float | getVX () const override |
virtual void | setVX (float value) override |
virtual float | getVY () const override |
virtual void | setVY (float value) override |
virtual float | getAngularVelocity () const override |
virtual void | setAngularVelocity (float value) override |
virtual bool | isActive () const override |
virtual void | setActive (bool value) override |
virtual bool | isAwake () const override |
virtual void | setAwake (bool value) override |
virtual bool | isSleepingAllowed () const override |
virtual void | setSleepingAllowed (bool value) override |
virtual bool | isBullet () const override |
virtual void | setBullet (bool value) override |
virtual bool | isFixedRotation () const override |
virtual void | setFixedRotation (bool value) override |
virtual float | getGravityScale () const override |
virtual void | setGravityScale (float value) override |
virtual float | getLinearDamping () const override |
virtual void | setLinearDamping (float value) override |
virtual float | getAngularDamping () const override |
virtual void | setAngularDamping (float value) override |
virtual void | setFriction (float value) override |
virtual void | setRestitution (float value) override |
virtual void | setSensor (bool value) override |
virtual void | setFilterData (b2Filter value) override |
virtual Vec2 | getCentroid () const override |
virtual void | setCentroid (const Vec2 &value) override |
virtual void | setCentroid (float x, float y) override |
virtual float | getInertia () const override |
virtual void | setInertia (float value) override |
virtual float | getMass () const override |
virtual void | setMass (float value) override |
virtual void | resetMass () override |
virtual b2Body * | getBody () override |
virtual bool | activatePhysics (b2World &world) override |
virtual void | deactivatePhysics (b2World &world) override |
virtual void | update (float delta) override |
int | getPositionSnap () |
void | setPositionSnap (unsigned int snap) |
int | getAngleSnap () |
void | setAngleSnap (unsigned int snap) |
Public Member Functions inherited from cugl::Obstacle | |
Obstacle (void) | |
virtual | ~Obstacle () |
void | setBodyState (const b2Body &body) |
float | getDensity () const |
float | getFriction () const |
float | getRestitution () const |
bool | isSensor () const |
b2Filter | getFilterData () const |
bool | isRemoved () const |
void | markRemoved (bool value) |
bool | isDirty () const |
void | markDirty (bool value) |
const std::function< void(Obstacle *obstacle)> & | getListener () const |
void | setListener (const std::function< void(Obstacle *obstacle)> &listener) |
std::string | getName () const |
void | setName (std::string value) |
std::string | toString () const |
Color4 | getDebugColor () const |
virtual void | setDebugColor (Color4 color) |
Node * | getDebugScene () const |
WireNode * | getDebugNode () const |
virtual void | setDebugScene (const std::shared_ptr< Node > &node) |
bool | hasDebug () |
Static Public Member Functions | |
static std::shared_ptr< CapsuleObstacle > | alloc () |
static std::shared_ptr< CapsuleObstacle > | alloc (const Vec2 &pos) |
static std::shared_ptr< CapsuleObstacle > | alloc (const Vec2 &pos, const Size &size) |
static std::shared_ptr< CapsuleObstacle > | alloc (const Vec2 &pos, const Size &size, Orientation orient) |
static bool | isHorizontal (Orientation value) |
Protected Member Functions | |
void | resize (const Size &size) |
virtual void | resetDebug () override |
Protected Member Functions inherited from cugl::SimpleObstacle | |
virtual void | updateDebug () override |
Protected Attributes | |
b2PolygonShape | _shape |
b2CircleShape | _ends |
b2AABB | _center |
b2Fixture * | _core |
b2Fixture * | _cap1 |
b2Fixture * | _cap2 |
Size | _dimension |
Orientation | _orient |
float | _seamEpsilon |
Protected Attributes inherited from cugl::SimpleObstacle | |
b2Body * | _body |
int | _posSnap |
unsigned long | _posFact |
int | _angSnap |
unsigned long | _angFact |
Protected Attributes inherited from cugl::Obstacle | |
b2BodyDef | _bodyinfo |
b2FixtureDef | _fixture |
b2MassData | _massdata |
bool | _masseffect |
std::shared_ptr< Node > | _scene |
std::shared_ptr< WireNode > | _debug |
Color4 | _dcolor |
std::string | _tag |
std::function< void(Obstacle *obstacle)> | _listener |
Capsule-shaped model to support collisions.
A capsule is a box with semicircular ends along the major axis. They are a popular physics object, particularly for character avatars. The rounded ends means they are less likely to snag, and they naturally fall off platforms when they go too far.
The constructors allow some control over the capsule shape. You can have half-capsules or full capsules. In the case where width == height, you can specify a vertical or horizontal capsule. However, the circles must be on a major axis. Therefore, you cannot have a vertical capsule if width > height, or a horiztonal capsule when width < height. The constructors will fail in those cases.
|
strong |
Enum to specify the capsule orientiation
|
inline |
Creates a new capsule object at the origin.
NEVER USE A CONSTRUCTOR WITH NEW. If you want to allocate an object on the heap, use one of the static constructors instead.
|
inlinevirtual |
Deletes this physics object and all of its resources.
We have to make the destructor public so that we can polymorphically delete physics objects.
A non-default destructor is necessary since we must release all claims on scene graph nodes.
|
inlinestatic |
Returns a new capsule object at the origin with no size.
|
inlinestatic |
Returns a new capsule object at the given point with no size.
The scene graph is completely decoupled from the physics system. The node does not have to be the same size as the physics body. We only guarantee that the scene graph node is positioned correctly according to the drawing scale.
pos | Initial position in world coordinates |
|
inlinestatic |
Returns a new capsule object of the given dimensions.
The orientation of the capsule will be a full capsule along the major axis. If width == height, it will default to a vertical orientation.
The scene graph is completely decoupled from the physics system. The node does not have to be the same size as the physics body. We only guarantee that the scene graph node is positioned correctly according to the drawing scale.
pos | Initial position in world coordinates |
size | The capsule size (width and height) |
|
inlinestatic |
Returns a new capsule object of the given dimensions and orientation.
The orientation must be consistent with the major axis (or else the two axes must be the same). If the orientation specifies a minor axis, then this constructor will return null.
The scene graph is completely decoupled from the physics system. The node does not have to be the same size as the physics body. We only guarantee that the scene graph node is positioned correctly according to the drawing scale.
pos | Initial position in world coordinates |
size | The capsule size (width and height) |
orient | The capsule orientation |
|
overridevirtual |
Create new fixtures for this body, defining the shape
This is the primary method to override for custom physics objects
Reimplemented from cugl::SimpleObstacle.
|
inline |
Returns the dimensions of this capsule
|
inline |
Returns the capsule height
|
inline |
Returns the orientation of this capsule
|
inline |
Returns the seam offset of the core rectangle
If the center rectangle is exactly the same size as the circle radius, you may get catching at the seems. To prevent this, you should make the center rectangle epsilon narrower so that everything rolls off the round shape. This parameter is that epsilon value
|
inline |
Returns the capsule width
|
inlineoverridevirtual |
Initializes a new box object at the origin with no size.
Reimplemented from cugl::Obstacle.
|
inlineoverridevirtual |
Initializes a new capsule object at the given point with no size.
The scene graph is completely decoupled from the physics system. The node does not have to be the same size as the physics body. We only guarantee that the scene graph node is positioned correctly according to the drawing scale.
pos | Initial position in world coordinates |
Reimplemented from cugl::Obstacle.
Initializes a new capsule object of the given dimensions.
The orientation of the capsule will be a full capsule along the major axis. If width == height, it will default to a vertical orientation.
The scene graph is completely decoupled from the physics system. The node does not have to be the same size as the physics body. We only guarantee that the scene graph node is positioned correctly according to the drawing scale.
pos | Initial position in world coordinates |
size | The box size (width and height) |
|
virtual |
Initializes a new capsule object of the given dimensions.
The orientation must be consistent with the major axis (or else the two axes must be the same). If the orientation specifies a minor axis, then this initializer will fail.
The scene graph is completely decoupled from the physics system. The node does not have to be the same size as the physics body. We only guarantee that the scene graph node is positioned correctly according to the drawing scale.
pos | Initial position in world coordinates |
size | The box size (width and height) |
|
inlinestatic |
Returns true if the orientation is a horizontal full or half capsule.
value | the orientation to check |
|
overridevirtual |
Release the fixtures for this body, reseting the shape
This is the primary method to override for custom physics objects
Reimplemented from cugl::SimpleObstacle.
|
overrideprotectedvirtual |
Creates the outline of the physics fixtures in the debug node
The debug node is use to outline the fixtures attached to this object. This is very useful when the fixtures have a very different shape than the texture (e.g. a circular shape attached to a square texture).
Reimplemented from cugl::Obstacle.
|
protected |
Resets the polygon vertices in the shape to match the dimension.
This is an internal method and it does not mark the physics object as dirty.
size | The new dimension (width and height) |
|
overridevirtual |
Sets the density of this body
The density is typically measured in usually in kg/m^2. The density can be zero or positive. You should generally use similar densities for all your fixtures. This will improve stacking stability.
value | the density of this body |
Reimplemented from cugl::SimpleObstacle.
|
inline |
Sets the dimensions of this capsule
value | the dimensions of this capsule |
|
inline |
Sets the dimensions of this capsule
width | The width of this capsule |
height | The height of this capsule |
|
inline |
Sets the capsule height
value | the capsule height |
bool cugl::CapsuleObstacle::setOrientation | ( | Orientation | value | ) |
Sets the orientation of this capsule, if valid.
If the orientation is not valid, then nothing happens and the method return false.
value | the orientation of this capsule |
void cugl::CapsuleObstacle::setSeamOffset | ( | float | value | ) |
Sets the seam offset of the core rectangle
If the center rectangle is exactly the same size as the circle radius, you may get catching at the seems. To prevent this, you should make the center rectangle epsilon narrower so that everything rolls off the round shape. This parameter is that epsilon value
value the seam offset of the core rectangle
|
inline |
Sets the capsule width
value | the capsule width |
|
protected |
A cache value for the first end cap fixture (for resizing)
|
protected |
A cache value for the second end cap fixture (for resizing)
|
protected |
AABB representation of capsule core for fast computation
|
protected |
A cache value for the center fixture (for resizing)
|
protected |
The width and height of the capsule
|
protected |
Shape information for the end caps
|
protected |
The capsule orientation
|
protected |
The seam offset of the core rectangle
|
protected |
Shape information for this capsule core