Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | Friends | List of all members
ime::RenderLayer Class Reference

A layer for drawable entities. More...

#include <RenderLayer.h>

Inheritance diagram for ime::RenderLayer:
ime::Object

Public Types

using Ptr = std::shared_ptr< RenderLayer >
 Shared render layer pointer. More...
 

Public Member Functions

 RenderLayer (const RenderLayer &)=delete
 Copy constructor. More...
 
RenderLayeroperator= (const RenderLayer &)=delete
 Copy assignment operator. More...
 
 RenderLayer (RenderLayer &&) noexcept=default
 Move constructor. More...
 
RenderLayeroperator= (RenderLayer &&) noexcept=default
 Move assignment operator. More...
 
std::string getClassName () const override
 Get the name of this class. More...
 
void setDrawable (bool render)
 Set whether or not the layer should be drawn by the scene. More...
 
bool isDrawable () const
 Check whether or not the layer is drawn by the scene. More...
 
void toggleDrawable ()
 Toggle the draw state of the layer. More...
 
unsigned int getIndex () const
 Get the index of the layer in the RenderLayerContainer. More...
 
const std::string & getName () const
 Get the name of the layer. More...
 
void add (Drawable &drawable, int renderOrder=0)
 Add a drawable to the layer. More...
 
bool has (const Drawable &drawable) const
 Check if the render layer has a given drawable or not. More...
 
bool remove (Drawable &drawable)
 Remove a drawable from the render layer. More...
 
void removeAll ()
 Remove all drawables from the render layer. More...
 
std::size_t getCount () const
 Get the number of drawables rendered by the layer. More...
 
void render (priv::RenderTarget &window) const
 
 ~RenderLayer () override
 Destructor. More...
 
void setTag (const std::string &tag)
 Assign the object an alias. More...
 
const std::string & getTag () const
 Get the tag assigned to the object. More...
 
unsigned int getObjectId () const
 Get the unique id of the object. More...
 
virtual std::string getClassType () const
 Get the name of the direct parent of an object instance. More...
 
int onPropertyChange (const std::string &property, const Callback< Property > &callback, bool oneTime=false)
 Add an event listener to a specific property change event. More...
 
int onPropertyChange (const Callback< Property > &callback, bool oneTime=false)
 Add an event listener to any property change event. More...
 
void suspendedEventListener (int id, bool suspend)
 Pause or resume execution of an event listener. More...
 
bool isEventListenerSuspended (int id) const
 Check if an event listener is suspended or not. More...
 
bool removeEventListener (const std::string &event, int id)
 Remove an event listener from an event. More...
 
bool removeEventListener (int id)
 Remove an event listener. More...
 
int onDestruction (const Callback<> &callback)
 Add a destruction listener. More...
 
bool isSameObjectAs (const Object &other) const
 Check if another object is the same instance as this object. More...
 

Protected Member Functions

void emitChange (const Property &property)
 Dispatch a property change event. More...
 
void emitDestruction ()
 Emit a destruction event. More...
 

Protected Attributes

EventEmitter eventEmitter_
 Event dispatcher. More...
 

Friends

class RenderLayerContainer
 Needs access to constructor. More...
 

Detailed Description

A layer for drawable entities.

Typically you add objects that should be drawn together to the same layer. The order in which render layers are rendered is specified in the RenderLayerContainer. Objects in the same layer can also be sorted. For example, you may have a background layer which has mountains, trees and valleys. However you don't want the objects to be drawn non-deterministically. You can specify which objects are drawn over which and which objects are drawn under which by specifying the render order of the object when adding it to the layer. Objects with the lowest render order are drawn first whilst objects with the highest render order are drawn last. When objects have the same render order, the object that was added first to the layer will be rendered first.

By default, all objects have the same render order, as a result, they are drawn in the order in which they were added to the layer

A layer is not instantiated directly but rather using a ime::RenderLayerContainer::create

Definition at line 64 of file RenderLayer.h.

Member Typedef Documentation

◆ Ptr

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

Shared render layer pointer.

Definition at line 66 of file RenderLayer.h.

Constructor & Destructor Documentation

◆ RenderLayer() [1/2]

ime::RenderLayer::RenderLayer ( const RenderLayer )
delete

Copy constructor.

◆ RenderLayer() [2/2]

ime::RenderLayer::RenderLayer ( RenderLayer &&  )
defaultnoexcept

Move constructor.

◆ ~RenderLayer()

ime::RenderLayer::~RenderLayer ( )
override

Destructor.

Member Function Documentation

◆ add()

void ime::RenderLayer::add ( Drawable drawable,
int  renderOrder = 0 
)

Add a drawable to the layer.

Parameters
drawableThe drawable to be added
renderOrderThe layer level render order of the drawable

The render order determines which game objects get rendered first and which game objects get rendered last in the layer. Therefore the order in which drawables are added to the layer does not necessarily matter. Drawables with the smallest render order are be rendered first. Note that multiple drawables can have the same render order, in such a case the drawables will be drawn in the order in which they were added to the layer

By default, all drawables have the same render order of 0

Warning
Th render layer keeps a reference to the drawable, therefore, it must remain alive for as long as it is used by the render layer

◆ 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

◆ emitDestruction()

void ime::Object::emitDestruction ( )
protectedinherited

Emit a destruction event.

Note
This function must be the first statement in the definition of a destructor to avoid undefined behavior. In addition, note that destruction listeners are invoked once. Therefore, multiple classes in a hierarchy may call this function but the class that makes the call first will be the one that invokes the destruction listeners

◆ getClassName()

std::string ime::RenderLayer::getClassName ( ) const
overridevirtual

Get the name of this class.

Returns
The name of this class

Implements ime::Object.

◆ getClassType()

virtual std::string ime::Object::getClassType ( ) const
virtualinherited

Get the name of the direct parent of an object instance.

Returns
The name of the direct parent of an object instance

In contrast to getClassName() which returns the name of the concrete class, this function returns the name of the concrete class's base class. This function is implemented by all derived classes of ime::Object which also serve as base classes. For classes whose direct parent is this class, this function will return the name of this class

auto rectangle = ime::RectangleShape(); // RectangleShape is derived from Shape
std::cout << rectangle->getClassName(); // Prints "RectangleShape"
std::cout << rectangle->getClassType(); // Prints "Shape"
A 2D shape having four sides and four corners (90 degree angles)
See also
getClassName

Reimplemented in ime::audio::Audio, ime::GameObject, ime::GridMover, ime::Collider, ime::Joint, ime::Drawable, ime::Shape, and ime::SpriteImage.

◆ getCount()

std::size_t ime::RenderLayer::getCount ( ) const

Get the number of drawables rendered by the layer.

Returns
The number of drawables rendered by the layer

◆ getIndex()

unsigned int ime::RenderLayer::getIndex ( ) const

Get the index of the layer in the RenderLayerContainer.

Returns
The index of the layer in the RenderLayerContainer

The index indicates the render order of the layer. The bigger the index the further away the layer is from the foreground. The layer with the an index of 0 is always the foreground layer and all other layers are rendered behind it

◆ getName()

const std::string & ime::RenderLayer::getName ( ) const

Get the name of the layer.

Returns
The name of the layer

◆ getObjectId()

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

Get the unique id of the object.

Returns
The unique id of the object

Note that each instance of ime::Object has a unique id

See also
setTag

◆ getTag()

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

Get the tag assigned to the object.

Returns
The tag of the object
See also
setTag

◆ has()

bool ime::RenderLayer::has ( const Drawable drawable) const

Check if the render layer has a given drawable or not.

Parameters
drawableThe drawable to be checked
Returns
True if the render layer has the drawable, otherwise false

When a render layer "has" a drawable, it means that the drawable is rendered by that layer to the render window

◆ isDrawable()

bool ime::RenderLayer::isDrawable ( ) const

Check whether or not the layer is drawn by the scene.

Returns
True if drawn by the scene, otherwise false
See also
setDrawable

◆ isEventListenerSuspended()

bool ime::Object::isEventListenerSuspended ( int  id) const
inherited

Check if an event listener is suspended or not.

Parameters
idThe identification number of the listener to be checked
Returns
True if suspended, otherwise false

This function also returns false if the specified event listener does not exist

See also
suspendedEventListener

◆ isSameObjectAs()

bool ime::Object::isSameObjectAs ( const Object other) const
inherited

Check if another object is the same instance as this object.

Parameters
otherThe object to compare against this object
Returns
True if other is the same instance as this object, otherwise false

◆ 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 unique id of the destruction listener

The destruction listener is called when the object reaches the end of its lifetime. Note that an object may have multiple destruction listeners registered to it

Warning
It's not advised to call virtual functions in the destruction callback as some parts of the object may have already been destroyed by the time the callback is invoked. In such an event, the behavior is undefined
See also
removeEventListener

◆ onPropertyChange() [1/2]

int ime::Object::onPropertyChange ( const Callback< Property > &  callback,
bool  oneTime = false 
)
inherited

Add an event listener to any property change event.

Parameters
callbackThe function to be executed when any property changes
oneTimeTrue to execute the callback one-time or false to execute it every time the event is triggered
Returns
The unique id of the event listener

When unsubscribing the any property change event handler, you must pass "propertyChange" as the name of the event

See also
onPropertyChange(const std::string&, const ime::Callback<ime::Property>&)

◆ onPropertyChange() [2/2]

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

Add an event listener to a specific property change event.

Parameters
propertyThe name of the property to add an event listener to
oneTimeTrue to execute the callback one-time or false to execute it every time the event is triggered
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, the setTag() function, modifies the tag property of the object, thus will generate a "tag" change event each time it is called

Note that multiple event listeners may be registered to the same property change event. In addition, 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");
See also
unsubscribe and onPropertyChange(const ime::Callback<ime::Property>&)

◆ operator=() [1/2]

RenderLayer & ime::RenderLayer::operator= ( const RenderLayer )
delete

Copy assignment operator.

◆ operator=() [2/2]

RenderLayer & ime::RenderLayer::operator= ( RenderLayer &&  )
defaultnoexcept

Move assignment operator.

◆ remove()

bool ime::RenderLayer::remove ( Drawable drawable)

Remove a drawable from the render layer.

Parameters
drawableThe drawable to be removed
Returns
True if the drawable was removed, otherwise false

When a drawable is removed from the render layer, it will no longer be rendered by the scene, hence it won't appear on the game window

◆ removeAll()

void ime::RenderLayer::removeAll ( )

Remove all drawables from the render layer.

◆ removeEventListener() [1/2]

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

Remove an event listener from an event.

Parameters
eventThe name of the event to remove an 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 tag of the object to console every time it changes
auto tagChangeId = object.onPropertyChange("tag", [](ime::Property tag) {
std::cout << name.getValue<std::string>() << std::endl;
});
// Stop displaying the tag of the object when it changes
object.removeEventListener("tag", tagChangeId);
Class that can store a value of any type.
Definition: Property.h:38

◆ removeEventListener() [2/2]

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

Remove an event listener.

Parameters
idThe id of the event listener to be removed
Returns
True if the event listener was removed or false if no such handler exists

◆ setDrawable()

void ime::RenderLayer::setDrawable ( bool  render)

Set whether or not the layer should be drawn by the scene.

Parameters
renderTrue to have the layer drawn by the scene otherwise false

By default the layer is drawable

◆ setTag()

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

Assign the object an alias.

Parameters
tagThe alias of the object

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

By default, the tag is an empty string

See also
getObjectId

◆ suspendedEventListener()

void ime::Object::suspendedEventListener ( int  id,
bool  suspend 
)
inherited

Pause or resume execution of an event listener.

Parameters
idThe event listeners unique identification number
suspendTrue to suspend/pause or false to unsuspend/resume
See also
isEventListenerSuspended

◆ toggleDrawable()

void ime::RenderLayer::toggleDrawable ( )

Toggle the draw state of the layer.

This function will set the layer to drawable if its currently not drawable and vice versa

See also
setDrawable

Friends And Related Function Documentation

◆ RenderLayerContainer

friend class RenderLayerContainer
friend

Needs access to constructor.

Definition at line 228 of file RenderLayer.h.

Member Data Documentation

◆ eventEmitter_

EventEmitter ime::Object::eventEmitter_
protectedinherited

Event dispatcher.

Definition at line 289 of file Object.h.


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