Simple event system for entities in the world.
This commit is contained in:
parent
ea6cf1362b
commit
3f87d19911
3 changed files with 94 additions and 36 deletions
36
dinkyecs.hpp
36
dinkyecs.hpp
|
@ -5,6 +5,9 @@
|
|||
#include <typeinfo>
|
||||
#include <unordered_map>
|
||||
#include <any>
|
||||
#include <tuple>
|
||||
#include <queue>
|
||||
|
||||
|
||||
namespace DinkyECS {
|
||||
|
||||
|
@ -12,10 +15,18 @@ namespace DinkyECS {
|
|||
|
||||
typedef std::unordered_map<Entity, std::any> EntityMap;
|
||||
|
||||
struct Event {
|
||||
int event = 0;
|
||||
Entity entity = 0;
|
||||
};
|
||||
|
||||
typedef std::queue<Event> EventQueue;
|
||||
|
||||
struct World {
|
||||
unsigned long entity_count = 0;
|
||||
std::unordered_map<std::type_index, EntityMap> $components;
|
||||
std::unordered_map<std::type_index, std::any> $facts;
|
||||
std::unordered_map<std::type_index, EventQueue> $events;
|
||||
|
||||
Entity entity() {
|
||||
return ++entity_count;
|
||||
|
@ -26,6 +37,11 @@ namespace DinkyECS {
|
|||
return $components[std::type_index(typeid(Comp))];
|
||||
}
|
||||
|
||||
template <typename Comp>
|
||||
EventQueue& queue_map_for() {
|
||||
return $events[std::type_index(typeid(Comp))];
|
||||
}
|
||||
|
||||
template <typename Comp>
|
||||
void remove(Entity ent) {
|
||||
EntityMap &map = entity_map_for<Comp>();
|
||||
|
@ -81,16 +97,24 @@ namespace DinkyECS {
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
template<typename Comp>
|
||||
void send(int event, std::any data) {
|
||||
|
||||
void send(int event, Entity entity) {
|
||||
EventQueue &queue = queue_map_for<Comp>();
|
||||
queue.push({event, entity});
|
||||
}
|
||||
|
||||
template<typename Comp>
|
||||
std::tuple<int, std::any data> recv() {
|
||||
|
||||
Event recv() {
|
||||
EventQueue &queue = queue_map_for<Comp>();
|
||||
Event evt = queue.front();
|
||||
queue.pop();
|
||||
return evt;
|
||||
}
|
||||
|
||||
template<typename Comp>
|
||||
bool has_event() {
|
||||
EventQueue &queue = queue_map_for<Comp>();
|
||||
return !queue.empty();
|
||||
}
|
||||
*/
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue