3#include <entt/entt.hpp>
4#include <EngineCore/WorldContext/WorldContextSet.hpp>
6#include "ComponentFunctions.hpp"
8namespace Grindstone::ECS {
9 template<
typename ComponentType>
10 void* CreateComponent(entt::registry& registry, entt::entity entity) {
11 return ®istry.emplace<ComponentType>(entity);
14 template<
typename ComponentType>
15 void RemoveComponent(entt::registry& registry, entt::entity entity) {
16 if (registry.any_of<ComponentType>(entity)) {
17 registry.remove<ComponentType>(entity);
21 template<
typename ComponentType>
22 Grindstone::Reflection::TypeDescriptor_Struct GetComponentReflectionData() {
23 return ComponentType::reflectionInfo;
26 template<
typename ComponentType>
27 bool TryGetComponent(entt::registry& registry, entt::entity entity,
void*& outComponent) {
28 ComponentType* foundComp = registry.try_get<ComponentType>(entity);
29 outComponent = foundComp;
31 return foundComp !=
nullptr;
34 template<
typename ComponentType>
35 bool HasComponent(entt::registry& registry, entt::entity entity) {
36 return registry.all_of<ComponentType>(entity);
39 template<
typename T,
typename =
void>
43 struct has_clone<T, std::void_t<decltype(std::declval<const T&>().Clone(
44 std::declval<Grindstone::WorldContextSet&>(), std::declval<entt::entity>()))>> : std::true_type {};
49 template<
typename ComponentType>
51 entt::registry& srcRegistry = src.GetEntityRegistry();
52 entt::registry& dstRegistry = dst.GetEntityRegistry();
54 auto srcEntities = srcRegistry.view<ComponentType>();
55 if constexpr (has_clone_v<ComponentType>) {
56 for (entt::entity entityID : srcEntities) {
57 ComponentType& srcComponent = srcRegistry.get<ComponentType>(entityID);
58 dstRegistry.emplace_or_replace<ComponentType>(entityID, srcComponent.Clone(dst, entityID));
62 for (entt::entity entityID : srcEntities) {
63 ComponentType srcComponentCpy = srcRegistry.get<ComponentType>(entityID);
64 dstRegistry.emplace_or_replace<ComponentType>(entityID, srcComponentCpy);
Definition WorldContextSet.hpp:11
Definition ComponentFunctionsDefinitions.hpp:40