Files
Seele/src/Engine/System/ComponentSystem.h
T
2024-05-01 19:05:48 +02:00

48 lines
1.2 KiB
C++

#pragma once
#include "SystemBase.h"
#include "Component/Component.h"
#include "Component/Camera.h"
namespace Seele
{
namespace System
{
template<typename... Components>
class ComponentSystem : public SystemBase
{
public:
ComponentSystem(PScene scene) : SystemBase(scene) {}
virtual ~ComponentSystem() {}
template<has_dependencies Comp>
auto getDependencies()
{
return Comp::dependencies;
}
template<typename Comp>
Dependencies<> getDependencies()
{
return Dependencies<>();
}
template<typename... Deps>
void setupView(Dependencies<Deps...>)
{
List<std::function<void()>> work;
registry.view<Components..., Deps...>().each([&](Components&... comp, Deps&... deps){
work.add([&]() {
(accessComponent(deps), ...);
update(comp...);
});
});
getThreadPool().runAndWait(std::move(work));
}
virtual void run(double delta) override
{
SystemBase::run(delta);
setupView((getDependencies<Components>() | ...));
}
virtual void update() override {}
virtual void update(Components&... components) = 0;
};
} // namespace System
} // namespace Seele