// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "StructUtils/InstancedStruct.h" #include "LandscapeEditLayerMergeRenderBlackboardItem.h" namespace UE::Landscape::EditLayers { #if WITH_EDITOR template bool UE::Landscape::EditLayers::FMergeRenderContext::HasBlackboardItem() const { for (const TInstancedStruct& Item : BlackboardItems) { if (const T* TypedItem = Item.template GetPtr()) { return true; } } return false; } template T& UE::Landscape::EditLayers::FMergeRenderContext::AddBlackboardItem(TArgs&&... InArgs) { T* Item = BlackboardItems.Add_GetRef(TInstancedStruct::Make(Forward(InArgs)...)).template GetMutablePtr(); return *Item; } template T* UE::Landscape::EditLayers::FMergeRenderContext::TryGetBlackboardItem() { for (TInstancedStruct& Item : BlackboardItems) { if (T* TypedItem = Item.template GetMutablePtr()) { return TypedItem; } } return nullptr; } template T& UE::Landscape::EditLayers::FMergeRenderContext::GetBlackboardItem() { for (TInstancedStruct& Item : BlackboardItems) { if (T* TypedItem = Item.template GetMutablePtr()) { return *TypedItem; } } check(false); // this is absolutely wrong, but we shouldn't ever reach that line and we need to return something anyway : static FLandscapeEditLayerMergeRenderBlackboardItem DummyItem; return *reinterpret_cast(&DummyItem); } template T& UE::Landscape::EditLayers::FMergeRenderContext::GetOrCreateBlackboardItem(TArgs&&... InArgs) { T* Item = TryGetBlackboardItem(); if (Item == nullptr) { Item = BlackboardItems.Add_GetRef(TInstancedStruct::Make(Forward(InArgs)...)).template GetMutablePtr(); } check(Item != nullptr); return *Item; } template TArray UE::Landscape::EditLayers::FMergeRenderContext::GetBlackboardItems() { TArray Items; for (TInstancedStruct& Item : BlackboardItems) { if (T* TypedItem = Item.template GetMutablePtr()) { Items.Add(TypedItem); } } return Items; } #endif // WITH_EDITOR } //namespace UE::Landscape::EditLayers