// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "MassEntityElementTypes.h" #include "Subsystems/Subsystem.h" namespace UE::Mass { template concept CFragment = TIsDerivedFrom::Type, FMassFragment>::Value; template concept CTag = TIsDerivedFrom::Type, FMassTag>::Value; template concept CChunkFragment = TIsDerivedFrom::Type, FMassChunkFragment>::Value; template concept CSharedFragment = TIsDerivedFrom::Type, FMassSharedFragment>::Value; template concept CConstSharedFragment = TIsDerivedFrom::Type, FMassConstSharedFragment>::Value; template concept CNonTag = CFragment || CChunkFragment || CSharedFragment || CConstSharedFragment; template concept CElement = CNonTag || CTag; template concept CSubsystem = TIsDerivedFrom::Type, USubsystem>::Value; namespace Private { template struct TElementTypeHelper { using Type = std::conditional_t, FMassFragment , std::conditional_t, FMassTag , std::conditional_t, FMassChunkFragment , std::conditional_t, FMassSharedFragment , std::conditional_t, FMassConstSharedFragment , void>>>>>; }; } template using TElementType = typename Private::TElementTypeHelper::Type; }