// Copyright Epic Games, Inc. All Rights Reserved. #include "MassReplicationTrait.h" #include "MassEntityTemplateRegistry.h" #include "Engine/World.h" #include "MassSpawnerTypes.h" #include "MassSimulationLOD.h" #include "MassReplicationTypes.h" #include "MassReplicationSubsystem.h" #include "MassEntityUtils.h" void UMassReplicationTrait::BuildTemplate(FMassEntityTemplateBuildContext& BuildContext, const UWorld& World) const { if (World.IsNetMode(NM_Standalone) && !BuildContext.IsInspectingData()) { return; } FReplicationTemplateIDFragment& TemplateIDFragment = BuildContext.AddFragment_GetRef(); TemplateIDFragment.ID = BuildContext.GetTemplateID(); BuildContext.AddFragment(); BuildContext.AddFragment(); BuildContext.AddFragment(); BuildContext.AddFragment(); BuildContext.AddFragment(); FMassEntityManager& EntityManager = UE::Mass::Utils::GetEntityManagerChecked(World); UMassReplicationSubsystem* ReplicationSubsystem = UWorld::GetSubsystem(&World); FConstSharedStruct ParamsFragment = EntityManager.GetOrCreateConstSharedFragment(Params); BuildContext.AddConstSharedFragment(ParamsFragment); if (LIKELY(!BuildContext.IsInspectingData())) { check(ReplicationSubsystem); FSharedStruct SharedFragment = EntityManager.GetOrCreateSharedFragment(FConstStructView::Make(Params), *ReplicationSubsystem, Params); BuildContext.AddSharedFragment(SharedFragment); } else { // in the investigation mode we only care about the fragment type FSharedStruct SharedFragment = EntityManager.GetOrCreateSharedFragment(); BuildContext.AddSharedFragment(SharedFragment); } }