// Copyright Epic Games, Inc. All Rights Reserved. #include "WaterIconHelper.h" #if WITH_EDITOR #include "Components/BillboardComponent.h" #include "Engine/Texture2D.h" #include "UObject/ConstructorHelpers.h" #include "WaterRuntimeSettings.h" #include "Modules/ModuleManager.h" #include "WaterEditorServices.h" #include "WaterModule.h" UBillboardComponent* FWaterIconHelper::EnsureSpriteComponentCreated_Internal(AActor* Actor, UClass* InClass, const TCHAR* InIconTextureName) { UBillboardComponent* ActorIcon = nullptr; ActorIcon = Actor->FindComponentByClass(); if (ActorIcon == nullptr) { ActorIcon = Actor->CreateEditorOnlyDefaultSubobject(TEXT("Sprite"), true); } if (ActorIcon != nullptr) { ConstructorHelpers::FObjectFinderOptional Texture(InIconTextureName); IWaterModuleInterface& WaterModule = FModuleManager::GetModuleChecked(TEXT("Water")); if (IWaterEditorServices* WaterEditorServices = WaterModule.GetWaterEditorServices()) { WaterEditorServices->RegisterWaterActorSprite(InClass, Texture.Get()); } ActorIcon->Sprite = Texture.Get(); ActorIcon->bHiddenInGame = true; ActorIcon->SpriteInfo.Category = TEXT("Water"); ActorIcon->SpriteInfo.DisplayName = NSLOCTEXT("SpriteCategory", "Water", "Water"); ActorIcon->SetVisibility(true); ActorIcon->SetupAttachment(Actor->GetRootComponent()); UpdateSpriteComponent(Actor, ActorIcon->Sprite); } return ActorIcon; } void FWaterIconHelper::UpdateSpriteComponent(AActor* Actor, UTexture2D* InTexture) { if (UBillboardComponent* ActorIcon = Actor->FindComponentByClass()) { FVector ZOffset(0.0f, 0.0f, GetDefault()->WaterBodyIconWorldZOffset); ActorIcon->SetRelativeScale3D(FVector(1.f)); ActorIcon->Sprite = InTexture; ActorIcon->SetRelativeLocation(ZOffset); ActorIcon->bIsScreenSizeScaled = true; ActorIcon->MarkRenderStateDirty(); } } #endif