// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "Modules/ModuleInterface.h" #include "Templates/SharedPointer.h" #include "Templates/UnrealTypeTraits.h" #include "Templates/EnableIf.h" #include "Containers/Map.h" template class ILandscapeFileFormat; using ILandscapeHeightmapFileFormat = ILandscapeFileFormat; using ILandscapeWeightmapFileFormat = ILandscapeFileFormat; class FUICommandList; class FLandscapeImageFileCache; class IEditLayerCustomization; class ULandscapeEditLayerBase; struct FEditLayerMenuBlock; using FEditLayerCategoryToEntryMap = TMap; /** Delegate called to get customizations for a specific edit layer class */ DECLARE_DELEGATE_RetVal(TSharedRef, FOnGetLandscapeEditLayerCustomizationInstance); using FCustomEditLayerLayoutNameMap = TMap; /** * LandscapeEditor module interface */ class ILandscapeEditorModule : public IModuleInterface { public: // Register / unregister a landscape file format plugin virtual void RegisterHeightmapFileFormat(TSharedRef FileFormat) = 0; virtual void RegisterWeightmapFileFormat(TSharedRef FileFormat) = 0; virtual void UnregisterHeightmapFileFormat(TSharedRef FileFormat) = 0; virtual void UnregisterWeightmapFileFormat(TSharedRef FileFormat) = 0; // Gets the type string used by the import/export file dialog virtual const TCHAR* GetHeightmapImportDialogTypeString() const = 0; virtual const TCHAR* GetWeightmapImportDialogTypeString() const = 0; virtual const TCHAR* GetHeightmapExportDialogTypeString() const = 0; virtual const TCHAR* GetWeightmapExportDialogTypeString() const = 0; // Edit layer customizations virtual void RegisterCustomEditLayerClassLayout(FName ClassName, FOnGetLandscapeEditLayerCustomizationInstance EditLayerLayoutDelegate) = 0; virtual void UnregisterCustomEditLayerClassLayout(FName ClassName) = 0; virtual TArray> QueryCustomEditLayerLayoutRecursive(UStruct* InClass) = 0; virtual TSharedPtr QueryCustomEditLayerLayoutForClass(UStruct* InClass) = 0; virtual void ApplyEditLayerContextMenuCustomizations(ULandscapeEditLayerBase* InEditLayer, const TArray>& InCustomizations, FEditLayerCategoryToEntryMap& OutContextMenuEntryMap) = 0; // Gets the heightmap/weightmap format associated with a given extension (null if no plugin is registered for this extension) virtual const ILandscapeHeightmapFileFormat* GetHeightmapFormatByExtension(const TCHAR* Extension) const = 0; virtual const ILandscapeWeightmapFileFormat* GetWeightmapFormatByExtension(const TCHAR* Extension) const = 0; template typename TEnableIf, const ILandscapeHeightmapFileFormat*>::Type GetFormatByExtension(const TCHAR* Extension) { return GetHeightmapFormatByExtension(Extension); } template typename TEnableIf, const ILandscapeWeightmapFileFormat*>::Type GetFormatByExtension(const TCHAR* Extension) { return GetWeightmapFormatByExtension(Extension); } virtual TSharedPtr GetLandscapeLevelViewportCommandList() const = 0; virtual FLandscapeImageFileCache& GetImageFileCache() const = 0; };