implement claude feedback for EntityAdmin
This commit is contained in:
@@ -1,33 +1,21 @@
|
|||||||
#include "EntityAdmin.h"
|
#include "EntityAdmin.h"
|
||||||
|
|
||||||
std::shared_ptr<EntityAdmin> EntityAdmin::getInstance()
|
entt::entity EntityAdmin::createEntity()
|
||||||
{
|
{
|
||||||
if (!s_instance)
|
return m_registry.create();
|
||||||
{
|
|
||||||
s_instance = std::shared_ptr<EntityAdmin>(new EntityAdmin());
|
|
||||||
}
|
|
||||||
return s_instance;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<EntityAdmin> EntityAdmin::s_instance;
|
bool EntityAdmin::isValid(entt::entity entity)
|
||||||
|
|
||||||
bool EntityAdmin::isValid(const entt::entity &entity)
|
|
||||||
{
|
{
|
||||||
return m_registry->valid(entity);
|
return m_registry.valid(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EntityAdmin::destroy(entt::entity entity)
|
||||||
|
{
|
||||||
|
m_registry.destroy(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EntityAdmin::clear()
|
void EntityAdmin::clear()
|
||||||
{
|
{
|
||||||
m_registry->clear();
|
m_registry.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void EntityAdmin::destroy(entt::entity &entity)
|
|
||||||
{
|
|
||||||
m_registry->destroy(entity);
|
|
||||||
}
|
|
||||||
|
|
||||||
EntityAdmin::EntityAdmin()
|
|
||||||
: m_registry(std::make_shared<entt::registry>())
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,151 +3,61 @@
|
|||||||
|
|
||||||
#include "entt/entity/registry.hpp"
|
#include "entt/entity/registry.hpp"
|
||||||
|
|
||||||
#include <QVector2D>
|
|
||||||
|
|
||||||
class EntityAdmin
|
class EntityAdmin
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static std::shared_ptr<EntityAdmin> getInstance();
|
EntityAdmin() = default;
|
||||||
private:
|
EntityAdmin(const EntityAdmin&) = delete;
|
||||||
static std::shared_ptr<EntityAdmin> s_instance;
|
EntityAdmin& operator=(const EntityAdmin&) = delete;
|
||||||
|
|
||||||
public:
|
template <typename... Ts, typename Func>
|
||||||
template <typename T1>
|
void forEach(Func&& f);
|
||||||
T1 &add(const entt::entity &entity);
|
|
||||||
void clear();
|
|
||||||
|
|
||||||
template <typename T1>
|
template <typename... Ts>
|
||||||
void forEach(std::function<void(entt::entity &pe, T1 &p1)> f);
|
bool hasAll(entt::entity entity);
|
||||||
template <typename T1, typename T2>
|
|
||||||
void forEach(std::function<void(entt::entity &pe, T1 &p1, T2 &p2)> f);
|
|
||||||
template <typename T1, typename T2, typename T3>
|
|
||||||
void forEach(std::function<void(entt::entity &pe, T1 &p1, T2 &p2, T3 &p3)> f);
|
|
||||||
template <typename T1, typename T2, typename T3, typename T4>
|
|
||||||
void forEach(std::function<void(entt::entity &pe, T1 &p1, T2 &p2, T3 &p3, T4 &p4)> f);
|
|
||||||
template <typename T1, typename T2, typename T3, typename T4, typename T5>
|
|
||||||
void forEach(std::function<void(entt::entity &pe, T1 &p1, T2 &p2, T3 &p3, T4 &p4, T5 &p5)> f);
|
|
||||||
|
|
||||||
template <typename T1>
|
|
||||||
bool hasAll(const entt::entity &entity);
|
|
||||||
template <typename T1, typename T2>
|
|
||||||
bool hasAll(const entt::entity &entity);
|
|
||||||
template <typename T1, typename T2, typename T3>
|
|
||||||
bool hasAll(const entt::entity &entity);
|
|
||||||
template <typename T1, typename T2, typename T3, typename T4>
|
|
||||||
bool hasAll(const entt::entity &entity);
|
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
T &get(const entt::entity &entity);
|
T& get(entt::entity entity);
|
||||||
|
|
||||||
bool isValid(const entt::entity &entity);
|
bool isValid(entt::entity entity);
|
||||||
|
void destroy(entt::entity entity);
|
||||||
|
void clear();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
factory methods (like spawnShip, spawnScrap, etc shall go here)
|
factory methods (like spawnShip, spawnScrap, etc shall go here)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void destroy(entt::entity &entity);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
EntityAdmin();
|
entt::entity createEntity();
|
||||||
EntityAdmin(const EntityAdmin&) = delete;
|
|
||||||
EntityAdmin& operator=(const EntityAdmin&) = delete;
|
|
||||||
|
|
||||||
std::shared_ptr<entt::registry> m_registry;
|
template <typename T, typename... Args>
|
||||||
|
T& add(entt::entity entity, Args&&... args);
|
||||||
|
|
||||||
|
entt::registry m_registry;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename T1>
|
template <typename... Ts, typename Func>
|
||||||
T1 &EntityAdmin::add(const entt::entity &entity)
|
void EntityAdmin::forEach(Func&& f)
|
||||||
{
|
{
|
||||||
return m_registry->emplace<T1>(entity);
|
m_registry.view<Ts...>().each(std::forward<Func>(f));
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T1>
|
template <typename... Ts>
|
||||||
void EntityAdmin::forEach(std::function<void(entt::entity &pe, T1 &p1)> f)
|
bool EntityAdmin::hasAll(entt::entity entity)
|
||||||
{
|
{
|
||||||
auto view = m_registry->view<T1>();
|
return m_registry.all_of<Ts...>(entity);
|
||||||
for (auto ae : view)
|
|
||||||
{
|
|
||||||
f(ae, view.get<T1>(ae));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T1, typename T2>
|
|
||||||
void EntityAdmin::forEach(std::function<void(entt::entity &pe, T1 &p1, T2 &p2)> f)
|
|
||||||
{
|
|
||||||
auto view = m_registry->view<T1, T2>();
|
|
||||||
for (auto[ae, a1, a2] : view.each())
|
|
||||||
{
|
|
||||||
f(ae, a1, a2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T1, typename T2, typename T3>
|
|
||||||
void EntityAdmin::forEach(std::function<void(entt::entity &pe, T1 &p1, T2 &p2, T3 &p3)> f)
|
|
||||||
{
|
|
||||||
auto view = m_registry->view<T1, T2, T3>();
|
|
||||||
for (auto[ae, a1, a2, a3] : view.each())
|
|
||||||
{
|
|
||||||
f(ae, a1, a2, a3);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T1, typename T2, typename T3, typename T4>
|
|
||||||
void EntityAdmin::forEach(std::function<void(entt::entity &pe, T1 &p1, T2 &p2, T3 &p3, T4 &p4)> f)
|
|
||||||
{
|
|
||||||
auto view = m_registry->view<T1, T2, T3, T4>();
|
|
||||||
for (auto[ae, a1, a2, a3, a4] : view.each())
|
|
||||||
{
|
|
||||||
f(ae, a1, a2, a3, a4);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T1, typename T2, typename T3, typename T4, typename T5>
|
|
||||||
void EntityAdmin::forEach(std::function<void(entt::entity &pe, T1 &p1, T2 &p2, T3 &p3, T4 &p4, T5 &p5)> f)
|
|
||||||
{
|
|
||||||
auto view = m_registry->view<T1, T2, T3, T4, T5>();
|
|
||||||
for (auto[ae, a1, a2, a3, a4, a5] : view.each())
|
|
||||||
{
|
|
||||||
f(ae, a1, a2, a3, a4, a5);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T1>
|
|
||||||
bool EntityAdmin::hasAll(const entt::entity &entity)
|
|
||||||
{
|
|
||||||
if (m_registry->all_of<T1>(entity))
|
|
||||||
return true;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T1, typename T2>
|
|
||||||
bool EntityAdmin::hasAll(const entt::entity &entity)
|
|
||||||
{
|
|
||||||
if (m_registry->all_of<T1, T2>(entity))
|
|
||||||
return true;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T1, typename T2, typename T3>
|
|
||||||
bool EntityAdmin::hasAll(const entt::entity &entity)
|
|
||||||
{
|
|
||||||
if (m_registry->all_of<T1, T2, T3>(entity))
|
|
||||||
return true;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T1, typename T2, typename T3, typename T4>
|
|
||||||
bool EntityAdmin::hasAll(const entt::entity &entity)
|
|
||||||
{
|
|
||||||
if (m_registry->all_of<T1, T2, T3, T4>(entity))
|
|
||||||
return true;
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
T &EntityAdmin::get(const entt::entity &entity)
|
T& EntityAdmin::get(entt::entity entity)
|
||||||
{
|
{
|
||||||
return m_registry->get<T>(entity);
|
return m_registry.get<T>(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, typename... Args>
|
||||||
|
T& EntityAdmin::add(entt::entity entity, Args&&... args)
|
||||||
|
{
|
||||||
|
return m_registry.emplace<T>(entity, std::forward<Args>(args)...);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // ENTITY_ADMIN_H
|
#endif // ENTITY_ADMIN_H
|
||||||
|
|||||||
Reference in New Issue
Block a user