Public Types | Public Member Functions | List of all members
ime::GridMoverContainer Class Reference

A container for GridMover objects. More...

#include <GridMoverContainer.h>

Inheritance diagram for ime::GridMoverContainer:
ime::ObjectContainer< GridMover >

Public Types

using Callback = std::function< void(Args...)>
 For each callback. More...
 
using Predicate = std::function< bool(const GridMover *)>
 Predicate callback. More...
 
using ObjectPtr = std::unique_ptr< GridMover >
 Unique Object pointer. More...
 

Public Member Functions

void update (Time deltaTime)
 
void handleEvent (Event event)
 
void render (priv::RenderTarget &window) const
 
GridMoveraddObject (ObjectPtr object, const std::string &group="none")
 Add an object to the container. More...
 
GridMoverfindByTag (const std::string &tag)
 Get an object with a given tag. More...
 
const GridMoverfindByTag (const std::string &tag) const
 
U * findByTag (const std::string &tag)
 Get an object with a given tag. More...
 
const U * findByTag (const std::string &tag) const
 
GridMoverfindById (unsigned int id)
 Get an object with the given id. More...
 
const GridMoverfindById (unsigned int id) const
 
U * findById (unsigned int id)
 Get an object with the given id. More...
 
const U * findById (unsigned int id) const
 
GridMoverfindIf (const Predicate &predicate)
 Conditionally find an object in the container. More...
 
const GridMoverfindIf (const Predicate &predicate) const
 
void removeByTag (const std::string &tag)
 Remove all objects with the given tag. More...
 
void removeById (unsigned int id)
 Remove an object with the given id. More...
 
bool remove (GridMover *object)
 Remove an object from the container. More...
 
void removeIf (const Predicate &predicate)
 Conditionally remove objects from the container. More...
 
void removeAll ()
 Remove all objects from the container. More...
 
std::size_t getCount () const
 Get the number of objects in the container. More...
 
ObjectContainer< GridMover > & createGroup (const std::string &name)
 Create a group to add objects to. More...
 
ObjectContainer< GridMover > & getGroup (const std::string &name) const
 Get a group in the container. More...
 
bool hasGroup (const std::string &name) const
 Check whether or not the container has a given group. More...
 
bool removeGroup (const std::string &name)
 Remove a group from the container. More...
 
void removeAllGroups ()
 Remove all groups from the container. More...
 
void forEach (const Callback< GridMover * > &callback) const
 Apply a callback function to each object in the container. More...
 
void forEachInGroup (const std::string &name, const Callback< GridMover * > &callback) const
 Apply a callback to each object in a specific group. More...
 
void forEachInGroups (const std::initializer_list< std::string > &groups, const Callback< GridMover * > &callback) const
 Apply a callback to each object in specific groups. More...
 
void forEachNotInGroup (const Callback< GridMover * > &callback) const
 Apply a callback to all objects that do not belong to a group. More...
 

Detailed Description

A container for GridMover objects.

Definition at line 44 of file GridMoverContainer.h.

Member Typedef Documentation

◆ Callback

using ime::ObjectContainer< GridMover >::Callback = std::function<void(Args...)>
inherited

For each callback.

Definition at line 44 of file ObjectContainer.h.

◆ ObjectPtr

using ime::ObjectContainer< GridMover >::ObjectPtr = std::unique_ptr<GridMover >
inherited

Unique Object pointer.

Definition at line 47 of file ObjectContainer.h.

◆ Predicate

using ime::ObjectContainer< GridMover >::Predicate = std::function<bool(const GridMover *)>
inherited

Predicate callback.

Definition at line 46 of file ObjectContainer.h.

Member Function Documentation

◆ addObject()

GridMover * ime::ObjectContainer< GridMover >::addObject ( ObjectPtr  object,
const std::string &  group = "none" 
)
inherited

Add an object to the container.

Parameters
objectThe object to be added
groupThe name of the group to add the object to
Returns
A pointer to the object after its added to the container

If the group is not found, it will be created and the object will be the first member of it. Groups are useful if you want to refer to objects that are the same or similar as a whole

By default the object does not belong to any group

See also
createGroup

◆ createGroup()

ObjectContainer< GridMover > & ime::ObjectContainer< GridMover >::createGroup ( const std::string &  name)
inherited

Create a group to add objects to.

Parameters
nameThe name of the group
Returns
The created group

This function is useful if you want to relate some objects and refer to them as a whole using a common group name instead of using a common tag name and looping though the container to find which objects have a given tag. Note that the name of the group must be unique

auto weapons = objectContainer.createGroup("weapons");
weapons.addObject(knife);
weapons.addObject(machete);
weapons.addObject(bat);
See also
addObject

◆ findById() [1/2]

GridMover * ime::ObjectContainer< GridMover >::findById ( unsigned int  id)
inherited

Get an object with the given id.

Parameters
idThe id of the object to be retrieved
Returns
The object with the given id or a nullptr if the object could not be found in the container

◆ findById() [2/2]

U * ime::ObjectContainer< GridMover >::findById ( unsigned int  id)
inherited

Get an object with the given id.

Parameters
idThe id of the object to be retrieved
Returns
The object with the given id or a nullptr if the object could not be found in the container or the the object is found but it is not convertible to type U

You can use this function to get the derived class type U if T is a base class

// The type of rectangle is ime::Shape*
auto rectangle = shapeContainer.findById(4);
// The type of rectangle2 is ime::RectangleShape*
auto rectangle2 = shapeContainer.findById<ime::RectangleShape>(4);
A 2D shape having four sides and four corners (90 degree angles)

◆ findByTag() [1/2]

GridMover * ime::ObjectContainer< GridMover >::findByTag ( const std::string &  tag)
inherited

Get an object with a given tag.

Parameters
tagThe tag of the object to be searched
Returns
The object with the given tag or a nullptr if the object could not be found in the container

Note that this function will return the first object it finds with the the given tag if the container has multiple objects with the same tag

◆ findByTag() [2/2]

U * ime::ObjectContainer< GridMover >::findByTag ( const std::string &  tag)
inherited

Get an object with a given tag.

Parameters
tagThe tag of the object to be searched
Returns
The object with the given tag or a nullptr if the object could not be found in the container or the the object is found but it is not convertible to type U

Note that this function will return the first object it finds with the the given tag if the container has multiple objects with the same tag. You can use this function to get the derived class type U if T is a base class:

// The type of rectangle is ime::Shape*
auto* rectangle = shapeContainer.findByTag("myRect");
// The type of rectangle2 is ime::RectangleShape*
auto* rectangle2 = shapeContainer.findByTag<ime::RectangleShape>("myRect");

◆ findIf()

GridMover * ime::ObjectContainer< GridMover >::findIf ( const Predicate predicate)
inherited

Conditionally find an object in the container.

Parameters
predicateA function which returns true if the object should be returned or false if the search should continue
Returns
The object that matches the found condition or a nullptr if an object that matches the success condition could not be found in the container

◆ forEach()

void ime::ObjectContainer< GridMover >::forEach ( const Callback< GridMover * > &  callback) const
inherited

Apply a callback function to each object in the container.

Parameters
callbackThe function to be applied to each object

Note that the callback is applied to all objects, this includes those that are assigned to groups

See also
forEachInGroup and forEachNotInGroup

◆ forEachInGroup()

void ime::ObjectContainer< GridMover >::forEachInGroup ( const std::string &  name,
const Callback< GridMover * > &  callback 
) const
inherited

Apply a callback to each object in a specific group.

Parameters
nameThe name of the group to apply callback on
callbackThe function to be applied to each object in the group

This function is a shortcut for:

// It's undefined behaviour to call getGroup if the group does not exist
if (container.hasGroup(name)) {
container.getGroup(name)->forEach(...);
}
See also
forEach and forEachNotInGroup

◆ forEachInGroups()

void ime::ObjectContainer< GridMover >::forEachInGroups ( const std::initializer_list< std::string > &  groups,
const Callback< GridMover * > &  callback 
) const
inherited

Apply a callback to each object in specific groups.

Parameters
groupsThe name of the groups to apply the callback on
callbackThe function to be applied to each object in the groups

For example, the following code deactivates all the game objects in the groups "bombs" and "guns":

gameObjects.forEachInGroups({"bombs", "guns"}, [](ime::GameObject* object) {
object->setActive(false);
});
Class for modelling game objects (players, enemies etc...)
Definition: GameObject.h:42
See also
forEach, forEachInGroup, ForEachNotInGroup

◆ forEachNotInGroup()

void ime::ObjectContainer< GridMover >::forEachNotInGroup ( const Callback< GridMover * > &  callback) const
inherited

Apply a callback to all objects that do not belong to a group.

Parameters
callbackThe function to be applied to each object in the container that does not belong to any group
See also
forEach and forEachInGroup

◆ getCount()

std::size_t ime::ObjectContainer< GridMover >::getCount ( ) const
inherited

Get the number of objects in the container.

Returns
The number of objects in the container

◆ getGroup()

ObjectContainer< GridMover > & ime::ObjectContainer< GridMover >::getGroup ( const std::string &  name) const
inherited

Get a group in the container.

Parameters
nameThe name of the group
Returns
The requested group
Warning
The specified group must exist in the container before this function is called otherwise undefined behavior
See also
createGroup and hasGroup

◆ hasGroup()

bool ime::ObjectContainer< GridMover >::hasGroup ( const std::string &  name) const
inherited

Check whether or not the container has a given group.

Parameters
nameThe name of the group to be checked
Returns
True if the container has the specified group, otherwise false
See also
createGroup

◆ remove()

bool ime::ObjectContainer< GridMover >::remove ( GridMover object)
inherited

Remove an object from the container.

Parameters
objectThe object to be removed
Returns
True if the object was removed or false if the object does not exist in the container
Warning
The argument must not be a nullptr

◆ removeAll()

void ime::ObjectContainer< GridMover >::removeAll ( )
inherited

Remove all objects from the container.

Warning
This function will invalidate any pointer(s) to the objects once they are removed from the container

◆ removeAllGroups()

void ime::ObjectContainer< GridMover >::removeAllGroups ( )
inherited

Remove all groups from the container.

This function will remove all objects that belong to a group from the container, leaving only objects that do not belong to a group if any. Note that pointers to the removed objects will be invalidated

See also
removeGroup

◆ removeById()

void ime::ObjectContainer< GridMover >::removeById ( unsigned int  id)
inherited

Remove an object with the given id.

Parameters
idThe id of the object to be removed
Warning
This function will invalidate any pointer(s) to the object once it is removed from the container

◆ removeByTag()

void ime::ObjectContainer< GridMover >::removeByTag ( const std::string &  tag)
inherited

Remove all objects with the given tag.

Parameters
tagThe tag of the objects to be removed
Warning
This function will invalidate any pointer(s) to the object once it is removed from the container

◆ removeGroup()

bool ime::ObjectContainer< GridMover >::removeGroup ( const std::string &  name)
inherited

Remove a group from the container.

Parameters
nameThe name of the group to be removed
Returns
True if the group was removed or false if the specified group does not exist in the container
Warning
This function will remove all objects in the given group from the container, therefore any pointers to the objects will be invalidated
See also
createGroup and removeAllGroups

◆ removeIf()

void ime::ObjectContainer< GridMover >::removeIf ( const Predicate predicate)
inherited

Conditionally remove objects from the container.

Parameters
predicateA function which returns true if the object should be removed or false if it should not be removed from the container

Note that this function will remove all objects for which the predicate return true

Warning
This function will invalidate any pointer(s) to the object once it is removed from the container

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