// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #if UE_ENABLE_INCLUDE_ORDER_DEPRECATED_IN_5_6 #include "MassEntityManager.h" #endif // UE_ENABLE_INCLUDE_OR #include "MassCommonTypes.h" #include "MassLODFragments.h" #include "Logging/LogMacros.h" MASSLOD_API DECLARE_LOG_CATEGORY_EXTERN(LogMassLOD, Log, All); struct FMassCommandBuffer; namespace UE::MassLOD { inline EMassLOD::Type GetLODFromArchetype(const FMassExecutionContext& Context) { if (Context.DoesArchetypeHaveTag()) { return EMassLOD::Off; } if (Context.DoesArchetypeHaveTag()) { return EMassLOD::Low; } if (Context.DoesArchetypeHaveTag()) { return EMassLOD::Medium; } if (Context.DoesArchetypeHaveTag()) { return EMassLOD::High; } return EMassLOD::Max; } template struct TMassLODTagForLevel { typedef FMassOffLODTag FTag; }; template<> struct TMassLODTagForLevel { typedef FMassHighLODTag FTag; }; template<> struct TMassLODTagForLevel { typedef FMassMediumLODTag FTag; }; template<> struct TMassLODTagForLevel { typedef FMassLowLODTag FTag; }; inline const UScriptStruct* GetLODTagFromLOD(EMassLOD::Type LOD) { switch (LOD) { case EMassLOD::High: return TMassLODTagForLevel::FTag::StaticStruct(); case EMassLOD::Medium: return TMassLODTagForLevel::FTag::StaticStruct(); case EMassLOD::Low: return TMassLODTagForLevel::FTag::StaticStruct(); case EMassLOD::Off: return TMassLODTagForLevel::FTag::StaticStruct(); default: checkf(false, TEXT("Unsupported LOD Type")); case EMassLOD::Max: return nullptr; } } inline bool IsLODTagSet(const FMassExecutionContext& Context, EMassLOD::Type LOD) { switch (LOD) { case EMassLOD::High: return Context.DoesArchetypeHaveTag(); case EMassLOD::Medium: return Context.DoesArchetypeHaveTag(); case EMassLOD::Low: return Context.DoesArchetypeHaveTag(); case EMassLOD::Off: return Context.DoesArchetypeHaveTag(); default: checkf(false, TEXT("Unsupported LOD Type")); case EMassLOD::Max: return false; } } void MASSLOD_API PushSwapTagsCommand(FMassCommandBuffer& CommandBuffer, const FMassEntityHandle Entity, const EMassLOD::Type PrevLOD, const EMassLOD::Type NewLOD); #if WITH_MASSGAMEPLAY_DEBUG namespace Debug { MASSLOD_API extern bool bLODCalculationsPaused; } // UE::MassLOD::Debug #endif // WITH_MASSGAMEPLAY_DEBUG } // UE::MassLOD