Public Types | Public Member Functions | Protected Member Functions | List of all members
ime::Joint Class Referenceabstract

Interface for Joint classes. More...

#include <Joint.h>

Inheritance diagram for ime::Joint:
ime::Object ime::DistanceJoint

Public Types

using Ptr = std::shared_ptr< Joint >
 Shared joint pointer. More...
 
using BodyPtr = std::shared_ptr< Body >
 Shared body pointer. More...
 

Public Member Functions

std::string getClassType () const override
 Get the name of this class. More...
 
virtual JointType getType () const =0
 Get the type of the joint. More...
 
virtual BodyPtr getBodyA ()=0
 Get the first body attached to ths joint. More...
 
virtual BodyPtr getBodyB ()=0
 Get the second body attached to this joint. More...
 
virtual Vector2f getBodyAWorldAnchorPoint () const =0
 Get the anchor point on body A in world coordinates. More...
 
virtual Vector2f getBodyBWorldAnchorPoint () const =0
 Get the anchor point on body B in world coordinates. More...
 
virtual Vector2f getReactionForce (float fpsLimit) const =0
 Get the reaction force on body B at the joint anchor. More...
 
virtual float getReactionTorque (float fpsLimit) const =0
 Get the reaction torque on body B. More...
 
virtual PropertyContainergetUserData ()=0
 Get the application specific Joint data. More...
 
virtual const PropertyContainergetUserData () const =0
 
virtual bool canBodiesCollide () const =0
 Check if the joint bodies can collide with each other or not. More...
 
virtual b2Joint * getInternalJoint ()=0
 
virtual const b2Joint * getInternalJoint () const =0
 
void setTag (const std::string &tag)
 Assign the object an alias. More...
 
const std::string & getTag () const
 Get the alias of the object. More...
 
unsigned int getObjectId () const
 Get the id of the object. More...
 
virtual std::string getClassName () const =0
 Get the name of the concrete class. More...
 
int onPropertyChange (const std::string &property, const Callback< Property > &callback)
 Add an event listener to a specific property change event. More...
 
void onPropertyChange (const Callback< Property > &callback)
 Add an event listener to a property change event. More...
 
int onEvent (const std::string &event, const Callback<> &callback)
 Add an event listener to an event. More...
 
bool unsubscribe (const std::string &event, int id)
 Remove an event listener from an event. More...
 
int onDestruction (const Callback<> &callback)
 Add a destruction listener. More...
 
bool removeDestructionListener (int id)
 Remove a destruction listener form the object. More...
 
bool operator== (const Object &rhs) const
 Check if two objects are the same object or not. More...
 
bool operator!= (const Object &rhs) const
 Check if two objects are not the same object. More...
 

Protected Member Functions

void emitChange (const Property &property)
 Dispatch a property change event. More...
 
void emit (const std::string &event)
 Dispatch an action event. More...
 

Detailed Description

Interface for Joint classes.

Joints are used to constrain rigid bodies to the world or to each other e.g a pulley

Note that joints are not constructed directly, use the createJoint method on a World instance to create a joint

Definition at line 45 of file Joint.h.

Member Typedef Documentation

◆ BodyPtr

using ime::Joint::BodyPtr = std::shared_ptr<Body>

Shared body pointer.

Definition at line 48 of file Joint.h.

◆ Ptr

using ime::Joint::Ptr = std::shared_ptr<Joint>

Shared joint pointer.

Definition at line 47 of file Joint.h.

Member Function Documentation

◆ canBodiesCollide()

virtual bool ime::Joint::canBodiesCollide ( ) const
pure virtual

Check if the joint bodies can collide with each other or not.

Returns
True if the bodies can collide with each other, otherwise false

Implemented in ime::DistanceJoint.

◆ emit()

void ime::Object::emit ( const std::string &  event)
protectedinherited

Dispatch an action event.

Parameters
eventThe name of the event to be dispatched

This function will invoke all event listeners of the specified event. The function should be used for events that represent an action, rather than those that represent a property change (Use emitChange for that)

See also
emitChange

◆ emitChange()

void ime::Object::emitChange ( const Property property)
protectedinherited

Dispatch a property change event.

Parameters
propertyThe property that changed

This function will invoke all the event listeners of the specified property

See also
emit

◆ getBodyA()

virtual BodyPtr ime::Joint::getBodyA ( )
pure virtual

Get the first body attached to ths joint.

Returns
The first body attached to this joint

Implemented in ime::DistanceJoint.

◆ getBodyAWorldAnchorPoint()

virtual Vector2f ime::Joint::getBodyAWorldAnchorPoint ( ) const
pure virtual

Get the anchor point on body A in world coordinates.

Returns
The anchor point in world coordinates

Implemented in ime::DistanceJoint.

◆ getBodyB()

virtual BodyPtr ime::Joint::getBodyB ( )
pure virtual

Get the second body attached to this joint.

Returns
The second body attached to this joint

Implemented in ime::DistanceJoint.

◆ getBodyBWorldAnchorPoint()

virtual Vector2f ime::Joint::getBodyBWorldAnchorPoint ( ) const
pure virtual

Get the anchor point on body B in world coordinates.

Returns
The anchor point on body B in world coordinates

Implemented in ime::DistanceJoint.

◆ getClassName()

virtual std::string ime::Object::getClassName ( ) const
pure virtualinherited

Get the name of the concrete class.

Returns
The name of the objects concrete class

This function is implemented by all internal classes that inherit from this class.

See also
getClassType

Implemented in ime::Tile, ime::SpriteSheet, ime::Sprite, ime::RectangleShape, ime::ConvexShape, ime::CircleShape, ime::Camera, ime::Scene, ime::RenderLayerContainer, ime::RenderLayer, ime::TargetGridMover, ime::RandomGridMover, ime::KeyboardGridMover, ime::DistanceJoint, ime::PolygonCollider, ime::EdgeCollider, ime::CircleCollider, ime::BoxCollider, ime::Body, ime::AABB, and ime::GameObject.

◆ getClassType()

std::string ime::Joint::getClassType ( ) const
overridevirtual

Get the name of this class.

Returns
The name of this class

Note that this function is only implemented by child classes of Object which also serve as a base class for other classes

See also
Object::getClassType and Object::getClassName

Reimplemented from ime::Object.

◆ getObjectId()

unsigned int ime::Object::getObjectId ( ) const
inherited

Get the id of the object.

Returns
The id of the object

Each object has a unique id

◆ getReactionForce()

virtual Vector2f ime::Joint::getReactionForce ( float  fpsLimit) const
pure virtual

Get the reaction force on body B at the joint anchor.

Parameters
fpsLimitThe games Frames Per Second limit
Returns
The reaction force on Body B at the joint anchor in Newtons (N)

Implemented in ime::DistanceJoint.

◆ getReactionTorque()

virtual float ime::Joint::getReactionTorque ( float  fpsLimit) const
pure virtual

Get the reaction torque on body B.

Parameters
fpsLimitThe games Frames Per Second limit
Returns
The reaction torque on body B in N*m

Implemented in ime::DistanceJoint.

◆ getTag()

const std::string& ime::Object::getTag ( ) const
inherited

Get the alias of the object.

Returns
The alias of the object
See also
setTag and getObjectId

◆ getType()

virtual JointType ime::Joint::getType ( ) const
pure virtual

Get the type of the joint.

Returns
The type of the joint

Implemented in ime::DistanceJoint.

◆ getUserData()

virtual PropertyContainer& ime::Joint::getUserData ( )
pure virtual

Get the application specific Joint data.

Returns
Application specific joint data

This data is extracted from the JointDefinition

Implemented in ime::DistanceJoint.

◆ onDestruction()

int ime::Object::onDestruction ( const Callback<> &  callback)
inherited

Add a destruction listener.

Parameters
callbackFunction to be executed when the object is destroyed
Returns
The id of the destruction listener

Note that an object may have more than one destruction listeners, however, you have to keep the returned id if you may want to remove the callback at a later time

Warning
The callback is called when the object is destroyed. Do not try to access the object in the callback. Doing so is undefined behavior
See also
removeDestructionListener

◆ onEvent()

int ime::Object::onEvent ( const std::string &  event,
const Callback<> &  callback 
)
inherited

Add an event listener to an event.

Parameters
eventThe name of the event to add an an event listener to
callbackThe function to be executed when the event takes place
Returns
The unique identification number of the event listener

Unlike onPropertyChange, this function registers event listeners to events that occur when something happens to the object, or when the object does something (action events). Usually the name of the event/action is the name of the function:

// Add event listeners to the object
object.onEvent("attachRigidBody", [] {
std::cout << "Rigid body attached to object << std::endl;
});
object.onEvent("removeRigidBody", [] {
std::cout << "Rigid body removed from object << std::endl;
});
// Invokes event listener(s)
object.attachRigidBody(body);
object.removeRigidBody();
See also
onPropertyChange and unsubscribe

◆ onPropertyChange() [1/2]

void ime::Object::onPropertyChange ( const Callback< Property > &  callback)
inherited

Add an event listener to a property change event.

Parameters
callbackThe function to be executed when the property changes
Returns
The unique id of the event listener

Note that only one callback function may be registered with this function. This means that adding a new event listener overwrites the previous event listener. To remove the callback, pass a nullptr as an argument. The function may be useful if you want to write the logic for property changes in one function.

See also
onPropertyChange(std::string, Callback)

◆ onPropertyChange() [2/2]

int ime::Object::onPropertyChange ( const std::string &  property,
const Callback< Property > &  callback 
)
inherited

Add an event listener to a specific property change event.

Parameters
propertyThe name of the property to listen for
callbackThe function to be executed when the property changes
Returns
The unique id of the event listener

A property change event is triggered by any function that begins with set, where the the text after set is the name of the property. For example, for the setTag function, the property that the function modifies is Tag.

Note that when adding a property change event listener, the name of the property must be in lowercase:

// Prints the tag of the player object to the console everytime it changes
player.onPropertyChange("tag", [](const Property& property) {
cout << "New tag: " << property.getValue<std::string>() << endl;
});
...
//Sets tag = "player1" and invokes event listener(s)
player.setTag("player1");

Unlike onPropertyChange(const Callback&) you can add multiple event listeners to the same property using this function. However you must store the unique id of the event listener if you wish to remove it at a later time

See also
unsubscribe and onPropertyChange(Callback)

◆ operator!=()

bool ime::Object::operator!= ( const Object rhs) const
inherited

Check if two objects are not the same object.

Parameters
rhsObject to compare against this object
Returns
True if rhs is NOT the same object as this object, otherwise false

Two objects are different from each other if they have different object id's

See also
getObjectId and operator==

◆ operator==()

bool ime::Object::operator== ( const Object rhs) const
inherited

Check if two objects are the same object or not.

Parameters
rhsObject to compare against this object
Returns
True if rhs is the same object as this object, otherwise false

Two objects are the same object if they have the same object id. Recall that each object instance has a unique id

See also
getObjectId and operator!=

◆ removeDestructionListener()

bool ime::Object::removeDestructionListener ( int  id)
inherited

Remove a destruction listener form the object.

Parameters
Theid of the destruction listener to be removed
Returns
True if the destruction listener was removed or false if the listener with the given id does not exist

◆ setTag()

void ime::Object::setTag ( const std::string &  tag)
inherited

Assign the object an alias.

Parameters
nameThe alias of the object

This function is useful if you want to refer to the object by tag instead of its id. Unlike an object id, multiple objects may have the same tag.

By default, the tag is an empty string

◆ unsubscribe()

bool ime::Object::unsubscribe ( const std::string &  event,
int  id 
)
inherited

Remove an event listener from an event.

Parameters
eventThe name of the event to remove event listener from
idThe unique id of the event listener to be removed
Returns
True if the event listener was removed or false if the event or the event listener is does not exist
// Display the name of the object to console every time it changes
auto nameChangeId = object.onPropertyChange("name", [](Property name) {
std::cout << name.getValue<std::string>() << std::endl;
});
// Stop displaying the name of the object when it changes
object.unsubscribe("name", id);

The documentation for this class was generated from the following file: