// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "MassEntityTypes.h" #include "MassLODFragments.h" #if UE_ENABLE_INCLUDE_ORDER_DEPRECATED_IN_5_6 #include "MassEntityManager.h" #include "MassCommonTypes.h" #include "MassRepresentationTypes.h" #endif // UE_ENABLE_INCLUDE_ORDER_DEPRECATED_IN_5_6 struct FMassCommandBuffer; namespace UE::Mass::Representation { inline EMassVisibility GetVisibilityFromArchetype(const FMassExecutionContext& Context) { if (Context.DoesArchetypeHaveTag()) { return EMassVisibility::CanBeSeen; } if (Context.DoesArchetypeHaveTag()) { return EMassVisibility::CulledByFrustum; } if (Context.DoesArchetypeHaveTag()) { return EMassVisibility::CulledByDistance; } return EMassVisibility::Max; } template struct TMassVisibilityTagForLevel { typedef FMassTag FTag; }; template<> struct TMassVisibilityTagForLevel { typedef FMassVisibilityCanBeSeenTag FTag; }; template<> struct TMassVisibilityTagForLevel { typedef FMassVisibilityCulledByFrustumTag FTag; }; template<> struct TMassVisibilityTagForLevel { typedef FMassVisibilityCulledByDistanceTag FTag; }; inline const UScriptStruct* GetTagFromVisibility(EMassVisibility Visibility) { switch (Visibility) { case EMassVisibility::CanBeSeen: return TMassVisibilityTagForLevel::FTag::StaticStruct(); case EMassVisibility::CulledByFrustum: return TMassVisibilityTagForLevel::FTag::StaticStruct(); case EMassVisibility::CulledByDistance: return TMassVisibilityTagForLevel::FTag::StaticStruct(); default: checkf(false, TEXT("Unsupported visibility Type")); case EMassVisibility::Max: return nullptr; } } inline bool IsVisibilityTagSet(const FMassExecutionContext& Context, EMassVisibility Visibility) { switch (Visibility) { case EMassVisibility::CanBeSeen: return Context.DoesArchetypeHaveTag(); case EMassVisibility::CulledByFrustum: return Context.DoesArchetypeHaveTag(); case EMassVisibility::CulledByDistance: return Context.DoesArchetypeHaveTag(); default: checkf(false, TEXT("Unsupported visibility Type")); case EMassVisibility::Max: return false; } } void PushSwapTagsCommand(FMassCommandBuffer& CommandBuffer, const FMassEntityHandle Entity, const EMassVisibility PrevVisibility, const EMassVisibility NewVisibility); } // UE::Mass::Representation