Fixes #60.
set(ENTITYX_BUILD_TESTING false CACHE BOOL "Enable building of tests.")
set(ENTITYX_RUN_BENCHMARKS false CACHE BOOL "Run benchmarks (in conjunction with -DENTITYX_BUILD_TESTING=1).")
set(ENTITYX_MAX_COMPONENTS 64 CACHE STRING "Set the maximum number of components.")
+set(ENTITYX_DT_TYPE double CACHE STRING "The type used for delta time in EntityX update methods.")
set(ENTITYX_BUILD_SHARED true CACHE BOOL "Build shared libraries?")
include(${CMAKE_ROOT}/Modules/CheckIncludeFile.cmake)
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/Ox /Zi /FS /DEBUG")
endif()
+# if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
+# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Weverything -Wno-c++98-compat -Wno-shadow -Wno-padded -Wno-missing-noreturn -Wno-global-constructors")
+# endif()
+
# C++11 feature checks
include(CheckCXX11Features.cmake)
message("-- Checking misc features")
require(HAVE_STDINT_H "stdint.h")
-if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
- set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g")
- set(CMAKE_CXX_FLAGS_MINSIZEREL "-Os -DNDEBUG")
- set(CMAKE_CXX_FLAGS_RELEASE "-O2 -DNDEBUG")
- set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g")
-elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
- # /Zi - Produces a program database (PDB) that contains type information and symbolic debugging information for use with the debugger.
- # /FS - Allows multiple cl.exe processes to write to the same .pdb file
- # /DEBUG - Enable debug during linking
- # /Od - Disables optimization
- set(CMAKE_CXX_FLAGS_DEBUG "/Zi /FS /DEBUG /Od /MDd")
- # /Ox - Full optimization
- set(CMAKE_CXX_FLAGS_RELEASE "/Ox -DNDEBUG")
- set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/Ox /Zi /FS /DEBUG")
-endif()
-
# Things to install
set(install_libs entityx)
```c++
struct MovementSystem : public System<MovementSystem> {
- void update(entityx::EntityManager &es, entityx::EventManager &events, double dt) override {
+ void update(entityx::EntityManager &es, entityx::EventManager &events, DeltaTime dt) override {
Position::Handle position;
Direction::Handle direction;
for (Entity entity : es.entities_with_components(position, direction)) {
```c++
class CollisionSystem : public System<CollisionSystem> {
public:
- void update(entityx::EntityManager &es, entityx::EventManager &events, double dt) override {
+ void update(entityx::EntityManager &es, entityx::EventManager &events, DeltaTime dt) override {
Position::Handle left_position, right_position;
for (Entity left_entity : es.entities_with_components(left_position)) {
for (Entity right_entity : es.entities_with_components(right_position)) {
event_manager.subscribe<Collision>(*this);
}
- void update(entityx::EntityManager &entities, entityx::EventManager &events, double dt) {}
+ void update(entityx::EntityManager &entities, entityx::EventManager &events, DeltaTime dt) {}
void receive(const Collision &collision) {
LOG(DEBUG) << "entities collided: " << collision.left << " and " << collision.right << endl;
}
}
- void update(double dt) {
+ void update(DeltaTime dt) {
systems.update<DebugSystem>(dt);
systems.update<MovementSystem>(dt);
systems.update<CollisionSystem>(dt);
- `-DENTITYX_MAX_COMPONENTS=64` - Override the maximum number of components that can be assigned to each entity.
- `-DENTITYX_BUILD_SHARED=1` - Whether to build shared libraries (defaults to 1).
- `-DENTITYX_BUILD_TESTING=1` - Whether to build tests (defaults to 0). Run with "make && make test".
+- `-DENTITYX_DT_TYPE=double` - The type used for delta time in EntityX update methods.
Once you have selected your flags, build and install with:
return collector.result();
}
// Number of connected slots.
- int size() {
- int size = 0;
+ std::size_t size() {
+ std::size_t size = 0;
SignalLink *link = callback_ring_;
link->incref();
do {
index_counter_ = 0;
}
+EntityCreatedEvent::~EntityCreatedEvent() {}
+EntityDestroyedEvent::~EntityDestroyedEvent() {}
+
} // namespace entityx
*/
struct EntityCreatedEvent : public Event<EntityCreatedEvent> {
explicit EntityCreatedEvent(Entity entity) : entity(entity) {}
+ virtual ~EntityCreatedEvent();
Entity entity;
};
*/
struct EntityDestroyedEvent : public Event<EntityDestroyedEvent> {
explicit EntityDestroyedEvent(Entity entity) : entity(entity) {}
+ virtual ~EntityDestroyedEvent();
Entity entity;
};
Iterator begin() { return Iterator(manager_, mask_, 0); }
- Iterator end() { return Iterator(manager_, mask_, manager_->capacity()); }
+ Iterator end() { return Iterator(manager_, mask_, uint32_t(manager_->capacity())); }
const Iterator begin() const { return Iterator(manager_, mask_, 0); }
const Iterator end() const { return Iterator(manager_, mask_, manager_->capacity()); }
*/
void destroy(Entity::Id entity) {
assert_valid(entity);
- int index = entity.index();
+ uint32_t index = entity.index();
auto mask = entity_component_mask_[entity.index()];
event_manager_.emit<EntityDestroyedEvent>(Entity(this, entity));
for (size_t i = 0; i < component_pools_.size(); i++) {
if (pool && mask.test(i))
pool->destroy(index);
}
- entity_component_mask_[index] = 0;
+ entity_component_mask_[index].reset();
entity_version_[index]++;
free_list_.push_back(index);
}
BaseEvent::Family BaseEvent::family_counter_ = 0;
+BaseEvent::~BaseEvent() {
+}
EventManager::EventManager() {
}
public:
typedef std::size_t Family;
- virtual ~BaseEvent() {}
+ virtual ~BaseEvent();
virtual Family my_family() const = 0;
BaseSystem::Family BaseSystem::family_counter_;
+BaseSystem::~BaseSystem() {
+}
+
void SystemManager::configure() {
for (auto &pair : systems_) {
pair.second->configure(event_manager_);
public:
typedef size_t Family;
- virtual ~BaseSystem() {}
+ virtual ~BaseSystem();
/**
* Called once all Systems have been added to the SystemManager.
*
* Called every game step.
*/
- virtual void update(EntityManager &entities, EventManager &events, double dt) = 0;
+ virtual void update(EntityManager &entities, EventManager &events, DeltaTime dt) = 0;
static Family family_counter_;
* Use this class when implementing Systems.
*
* struct MovementSystem : public System<MovementSystem> {
- * void update(EntityManager &entities, EventManager &events, double dt) {
+ * void update(EntityManager &entities, EventManager &events, DeltaTime dt) {
* // Do stuff to/with entities...
* }
* }
* Call the System::update() method for a registered system.
*/
template <typename S>
- void update(double dt) {
+ void update(DeltaTime dt) {
assert(initialized_ && "SystemManager::configure() not called");
std::shared_ptr<S> s = system<S>();
s->update(entity_manager_, event_manager_, dt);
#pragma once
-#cmakedefine ENTITYX_MAX_COMPONENTS @ENTITYX_MAX_COMPONENTS@
-
#include <cstdint>
#include <cstddef>
namespace entityx {
-static const size_t MAX_COMPONENTS = ENTITYX_MAX_COMPONENTS;
+static const size_t MAX_COMPONENTS = @ENTITYX_MAX_COMPONENTS@;
+typedef @ENTITYX_DT_TYPE@ DeltaTime;
} // namespace entityx
events.subscribe<ComponentAddedEvent<C>>(*this);
}
- virtual void update(EntityManager &entities, EventManager &events, double dt) override {}
+ virtual void update(EntityManager &entities, EventManager &events, DeltaTime dt) override {}
private:
template <typename D>
// Updates a body's position and rotation.
struct BodySystem : public ex::System<BodySystem> {
- void update(ex::EntityManager &es, ex::EventManager &events, double dt) override {
+ void update(ex::EntityManager &es, ex::EventManager &events, DeltaTime dt) override {
Body::Handle body;
for (ex::Entity entity : es.entities_with_components(body)) {
body->position += body->direction * static_cast<float>(dt);
// Fades out the alpha value of any Renderable and Fadeable entity. Once the
// object has completely faded out it is destroyed.
struct FadeOutSystem : public ex::System<FadeOutSystem> {
- void update(ex::EntityManager &es, ex::EventManager &events, double dt) override {
+ void update(ex::EntityManager &es, ex::EventManager &events, DeltaTime dt) override {
Fadeable::Handle fade;
Renderable::Handle renderable;
for (ex::Entity entity : es.entities_with_components(fade, renderable)) {
public:
explicit BounceSystem(sf::RenderTarget &target) : size(target.getSize()) {}
- void update(ex::EntityManager &es, ex::EventManager &events, double dt) override {
+ void update(ex::EntityManager &es, ex::EventManager &events, DeltaTime dt) override {
Body::Handle body;
for (ex::Entity entity : es.entities_with_components(body)) {
if (body->position.x + body->direction.x < 0 ||
size.y = size.y / PARTITIONS + 1;
}
- void update(ex::EntityManager &es, ex::EventManager &events, double dt) override {
+ void update(ex::EntityManager &es, ex::EventManager &events, DeltaTime dt) override {
reset();
collect(es);
collide(events);
events.subscribe<CollisionEvent>(*this);
}
- void update(ex::EntityManager &es, ex::EventManager &events, double dt) override {
+ void update(ex::EntityManager &es, ex::EventManager &events, DeltaTime dt) override {
for (ex::Entity entity : collided) {
emit_particles(es, entity);
entity.destroy();
text.setColor(sf::Color::White);
}
- void update(ex::EntityManager &es, ex::EventManager &events, double dt) override {
+ void update(ex::EntityManager &es, ex::EventManager &events, DeltaTime dt) override {
Body::Handle body;
Renderable::Handle renderable;
for (ex::Entity entity : es.entities_with_components(body, renderable)) {
}
}
- void update(double dt) {
+ void update(DeltaTime dt) {
systems.update<BodySystem>(dt);
systems.update<FadeOutSystem>(dt);
systems.update<BounceSystem>(dt);