| 14 | #define LOCTEXT_NAMESPACE "PCGExContext" |
| 15 | |
| 16 | void FPCGExContext::StageOutput(const FName Pin, UPCGData* InData, const TSet<FString>& InTags, const bool bManaged, const bool bIsMutable) |
| 17 | { |
| 18 | TRACE_CPUPROFILER_EVENT_SCOPE(FPCGExContext::StageOutput); |
| 19 | if (!IsInGameThread()) |
| 20 | { |
| 21 | FWriteScopeLock WriteScopeLock(StagedOutputLock); |
| 22 | |
| 23 | FPCGTaggedData& Output = StagedOutputs.Emplace_GetRef(); |
| 24 | Output.Pin = Pin; |
| 25 | Output.Data = InData; |
| 26 | Output.Tags.Append(InTags); |
| 27 | } |
| 28 | else |
| 29 | { |
| 30 | FPCGTaggedData& Output = StagedOutputs.Emplace_GetRef(); |
| 31 | Output.Pin = Pin; |
| 32 | Output.Data = InData; |
| 33 | Output.Tags.Append(InTags); |
| 34 | } |
| 35 | |
| 36 | if (bManaged) { ManagedObjects->Add(InData); } |
| 37 | if (bIsMutable && bCleanupConsumableAttributes) |
| 38 | { |
| 39 | #if PCGEX_ENGINE_VERSION > 503 |
| 40 | if (UPCGMetadata* Metadata = InData->MutableMetadata()) |
| 41 | { |
| 42 | for (const FName ConsumableName : ConsumableAttributesSet) |
| 43 | { |
| 44 | if (!Metadata->HasAttribute(ConsumableName) || ProtectedAttributesSet.Contains(ConsumableName)) { continue; } |
| 45 | Metadata->DeleteAttribute(ConsumableName); |
| 46 | } |
| 47 | } |
| 48 | #else |
| 49 | if(const UPCGSpatialData* SpatialData = Cast<UPCGSpatialData>(InData); SpatialData->Metadata) |
| 50 | { |
| 51 | for (const FName ConsumableName : ConsumableAttributesSet) |
| 52 | { |
| 53 | if (!SpatialData->Metadata->HasAttribute(ConsumableName) || !ProtectedAttributesSet.Contains(ConsumableName)) { continue; } |
| 54 | SpatialData->Metadata->DeleteAttribute(ConsumableName); |
| 55 | } |
| 56 | } |
| 57 | #endif |
| 58 | } |
| 59 | } |
| 60 | |
| 61 | void FPCGExContext::StageOutput(const FName Pin, UPCGData* InData, const bool bManaged) |
| 62 | { |