entity component API sorted

This commit is contained in:
benkyd
2022-06-08 00:04:25 +00:00
parent bdb29e6fa5
commit 7c88558c55
6 changed files with 81 additions and 1 deletions

View File

@@ -7,6 +7,7 @@
#include <Aeon/Core/Events.hpp> #include <Aeon/Core/Events.hpp>
#include <Aeon/Core/GameLayer.hpp> #include <Aeon/Core/GameLayer.hpp>
#include <Aeon/Input/Input.hpp> #include <Aeon/Input/Input.hpp>
#include <Aeon/Entity/EntityController.hpp>
namespace Core namespace Core
{ {
@@ -43,6 +44,7 @@ public:
private: private:
Display mDisplay; Display mDisplay;
EC::EntityController& mEntityController;
Input::InputController& mInput; Input::InputController& mInput;
// Game layers from z orderxko285132046 // Game layers from z orderxko285132046

View File

@@ -0,0 +1,10 @@
#ifndef AEON_ENTITY_CORECOMPONENTS_POSITIONCOMPONENT_H_
#define AEON_ENTITY_CORECOMPONENTS_POSITIONCOMPONENT_H_
template <typename T, uint8_t D>
struct Position
{
// Vector<D, T> data;
}
#endif

View File

@@ -1,12 +1,27 @@
#ifndef AEON_ENTITY_ENTITY_H_
#define AEON_ENTITY_ENTITY_H_
#include <Aeon/Includes.hpp> #include <Aeon/Includes.hpp>
namespace EC namespace EC
{ {
template <typename T>
struct Entity struct Entity
{ {
uint32_t id; T id;
inline bool operator==( const Entity& rhs )
{
return rhs.id == id;
}
inline bool operator!=( const Entity& rhs )
{
return rhs.id != id;
}
}; };
} }
#endif

View File

@@ -1,8 +1,57 @@
#ifndef AEON_ENTITY_ENTITYCONTROLLER_H_
#define AEON_ENTITY_ENTITYCONTROLLER_H_
#include <Aeon/Includes.hpp>
struct Entity;
struct Component;
namespace EC namespace EC
{ {
// TODO: Entities space in memory should be pre-allocated
// using the engine's lifecycle bump allocator
class EntityRegistry
{
public:
EntityRegistry();
~EntityRegistry();
Entity& Create();
Entity& Copy(const Entity& entity);
Entity& Destroy(Entity& entity);
bool Valid(const Entity& entity);
// add, replace components
template <typename TComponent>
TComponent& Add(const Entity& entity);
template <typename TComponent>
TComponent& Replace(const Entity& entity);
// replace inplace
template <typename TComponent>
TComponent& Patch(const Entity& entity);
// Get component from entity based on T
template <typename TComponent>
TComponent& Get(const Entity& entity);
// Get std::optional from entity based on T
template <typename TComponent>
std::optional<TComponent&> Opt(const Entity& entity);
// TODO: Sort by component properties, for example list of
// entities with the renderable components, sorted by Y pos
// of position component
// template <typename T>
// std::vector<T&> Sort(std::function<;
private:
};
} }
#endif

View File

@@ -19,5 +19,7 @@ extern "C" {
#include <iomanip> #include <iomanip>
#include <tuple> #include <tuple>
#include <map> #include <map>
#include <optional>
#include <functional>
#endif #endif

View File

@@ -25,6 +25,8 @@ file(GLOB EngineSource
Aeon/*.cpp Aeon/*.cpp
Aeon/Core/*.cpp Aeon/Core/*.cpp
Aeon/Debug/*.cpp Aeon/Debug/*.cpp
Aeon/Entity/*.cpp
Aeon/Entity/CoreComponents/*.cpp
Aeon/Input/*.cpp Aeon/Input/*.cpp
Aeon/Maths/*.cpp Aeon/Maths/*.cpp
Aeon/Rendering/*.cpp Aeon/Rendering/*.cpp