aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYann Herklotz <ymherklotz@gmail.com>2018-06-22 00:07:37 +0100
committerYann Herklotz <ymherklotz@gmail.com>2018-06-22 00:07:37 +0100
commit774a0acb51b7e97c1f7951fc90ddd51c19527a50 (patch)
tree290869ae2bf0f41071b234d4339d2b67563d639c
parentc7838e4fb65546c82314f30502d162953c967fa1 (diff)
downloadYAGE-774a0acb51b7e97c1f7951fc90ddd51c19527a50.tar.gz
YAGE-774a0acb51b7e97c1f7951fc90ddd51c19527a50.zip
Expanding entity system
-rw-r--r--yage/entity/entity.cpp17
-rw-r--r--yage/entity/entity.h44
2 files changed, 27 insertions, 34 deletions
diff --git a/yage/entity/entity.cpp b/yage/entity/entity.cpp
index 050514c3..25e8e2d0 100644
--- a/yage/entity/entity.cpp
+++ b/yage/entity/entity.cpp
@@ -1,5 +1,7 @@
#include "entity.h"
+#include "component.h"
+
#include <algorithm>
namespace yage
@@ -27,14 +29,23 @@ bool EntityManager::is_valid(Entity entity) const
return false;
}
+EntityManager &EntityManager::add_component(Entity entity,
+ BaseComponent *component)
+{
+ auto id = component->getGroup();
+ component_masks_[entity] =
+ component_masks_[entity] | ComponentMask(1 << id);
+ return *this;
+}
+
Entity EntityManager::update_next_entity()
{
if (deleted_.empty()) {
- return ++next_entity_;
+ return next_entity_++;
}
- next_entity_ = deleted_.back();
+ Entity ent = deleted_.back();
deleted_.pop_back();
- return next_entity_;
+ return ent;
}
} // namespace yage
diff --git a/yage/entity/entity.h b/yage/entity/entity.h
index d9a221b9..2aa31a66 100644
--- a/yage/entity/entity.h
+++ b/yage/entity/entity.h
@@ -1,40 +1,21 @@
-#include <bitset>
+#pragma once
+
#include <vector>
-namespace yage {
+#include "component.h"
+
+namespace yage
+{
-/**
+/**
* The entity is currently just an unsigned integer, which may change to a
* class in the future.
*/
typedef unsigned int Entity;
-/**
- * The component mask represents all the components that the entity is
- * currently attached to.
- */
-typedef std::bitset<64> ComponentMask;
-
-class EntityManager;
-
-class BaseSystem;
-
-template <typename T>
-class System;
-
-class BaseComponent;
-
-template <typename T>
-class Component;
-
-class BaseComponentGroup;
-
-template <typename T>
-class ComponentGroup;
-
-/**
+/**
* Has to keep track of all the different entities and their current state.
- *
+ *
* The key actions on an Entity are: deleting, creating.
*/
class EntityManager
@@ -43,14 +24,15 @@ public:
Entity create_entity();
EntityManager &delete_entity(Entity entity);
bool is_valid(Entity entity) const;
- void add_component(Entity entity, BaseComponent *component);
+ EntityManager &add_component(Entity entity, BaseComponent *component);
private:
Entity update_next_entity();
- Entity next_entity_;
+ Entity next_entity_ = 0;
- std::vector<BaseComponentGroup *> component_group_;
+public:
+ std::vector<ComponentGroup> component_group_;
std::vector<ComponentMask> component_masks_;
std::vector<Entity> deleted_;
};