Implemented basic game dll interaction

This commit is contained in:
Dynamitos
2023-01-29 18:58:59 +01:00
parent 2208ab438a
commit 0dce84459e
72 changed files with 1297 additions and 350 deletions
+10 -45
View File
@@ -1,63 +1,28 @@
#pragma once
#include <entt/entt.hpp>
#include <thread_pool/thread_pool.h>
#include "Component/Component.h"
#include <entt/entt.hpp>
#include "Scene/Scene.h"
namespace Seele
{
namespace System
{
template<typename... Components>
class SystemBase
class SystemBase
{
public:
SystemBase(entt::registry& registry) : registry(registry) {}
SystemBase(PScene scene) : registry(scene->registry), scene(scene) {}
virtual ~SystemBase() {}
template<is_component Comp>
auto getDependencies()
{
return Comp::dependencies;
}
template<typename Comp>
Dependencies<> getDependencies()
{
return Dependencies<>();
}
template<typename... Dep>
auto mergeDependencies(Dep... deps)
{
return (deps | ...);
}
template<typename... Deps>
void setupView(Dependencies<Deps...>, dp::thread_pool<>&)
{
registry.view<Components..., Deps...>().each([&](Components&... comp, Deps&... deps){
//pool.enqueue_detach([&](){
(accessComponent(deps) + ...);
update((comp,...));
//});
});
}
template<>
void setupView(Dependencies<>, dp::thread_pool<>&)
{
registry.view<Components...>().each([&](Components&... comp){
//pool.enqueue_detach([&](){
update(comp...);
//});
});
}
void run(dp::thread_pool<>& pool, double delta)
virtual void run(dp::thread_pool<>& pool, double delta)
{
deltaTime = delta;
setupView(mergeDependencies((getDependencies<Components>(),...)), pool);
update();
}
virtual void update(Components&... components) = 0;
virtual void update() {}
protected:
double deltaTime;
private:
entt::registry& registry;
PScene scene;
};
DEFINE_REF(SystemBase)
} // namespace System
} // namespace Seele
} // namespace Seele