Gamedev Framework (gf) 1.2.0
A C++17 framework for 2D games
EntityContainer.h
1/*
2 * Gamedev Framework (gf)
3 * Copyright (C) 2016-2022 Julien Bernard
4 *
5 * This software is provided 'as-is', without any express or implied
6 * warranty. In no event will the authors be held liable for any damages
7 * arising from the use of this software.
8 *
9 * Permission is granted to anyone to use this software for any purpose,
10 * including commercial applications, and to alter it and redistribute it
11 * freely, subject to the following restrictions:
12 *
13 * 1. The origin of this software must not be misrepresented; you must not
14 * claim that you wrote the original software. If you use this software
15 * in a product, an acknowledgment in the product documentation would be
16 * appreciated but is not required.
17 * 2. Altered source versions must be plainly marked as such, and must not be
18 * misrepresented as being the original software.
19 * 3. This notice may not be removed or altered from any source distribution.
20 */
21#ifndef GF_ENTITY_CONTAINER_H
22#define GF_ENTITY_CONTAINER_H
23
24#include <type_traits>
25#include <vector>
26
27#include "GraphicsApi.h"
28#include "Ref.h"
29#include "RenderStates.h"
30#include "Time.h"
31
32namespace gf {
33#ifndef DOXYGEN_SHOULD_SKIP_THIS
34inline namespace v1 {
35#endif
36
37 class Entity;
38 class RenderTarget;
39
60 class GF_GRAPHICS_API EntityContainer {
61 public:
62
72 void update(Time time);
73
84 void render(RenderTarget& target, const RenderStates& states = RenderStates());
85
100 void addEntity(Entity& entity);
101
110
123 template<typename E>
124 E *removeTypedEntity(E *entity) {
125 static_assert(std::is_base_of<Entity, E>::value, "E must be an Entity");
126 return static_cast<E*>(removeEntity(entity));
127 }
128
131 private:
132 std::vector<Ref<Entity>> m_entities;
133 };
134
135#ifndef DOXYGEN_SHOULD_SKIP_THIS
136}
137#endif
138}
139
140#endif // GF_ENTITY_CONTAINER_H
A collection of entities.
Definition: EntityContainer.h:60
void render(RenderTarget &target, const RenderStates &states=RenderStates())
Render the entities on the target.
void addEntity(Entity &entity)
Add an entity to the collection.
E * removeTypedEntity(E *entity)
Remove a typed entity from the collection.
Definition: EntityContainer.h:124
void update(Time time)
Update the entities.
Entity * removeEntity(Entity *entity)
Remove an entity from the collection.
A game entity.
Definition: Entity.h:53
Base class for all render targets (window, texture, ...)
Definition: RenderTarget.h:102
Represents a time value.
Definition: Time.h:65
The namespace for gf classes.
Define the states used for drawing to a RenderTarget.
Definition: RenderStates.h:82