2019-12-26 15:33:43 -05:00
// Copyright Epic Games, Inc. All Rights Reserved.
2014-03-14 14:13:41 -04:00
# include "LandscapeEditorDetails.h"
2016-11-23 15:48:37 -05:00
# include "Framework/Commands/UIAction.h"
# include "Framework/MultiBox/MultiBoxDefs.h"
# include "Widgets/Text/STextBlock.h"
# include "Framework/MultiBox/MultiBoxBuilder.h"
# include "Widgets/Input/SComboButton.h"
2019-05-09 08:54:19 -04:00
# include "Widgets/Input/SMultiLineEditableTextBox.h"
2019-12-19 18:07:47 -05:00
# include "Widgets/Input/SSpinBox.h"
2020-07-17 14:42:23 -04:00
# include "Widgets/Input/SSegmentedControl.h"
2016-11-23 15:48:37 -05:00
# include "LandscapeEdMode.h"
# include "LandscapeEditorDetailCustomization_NewLandscape.h"
# include "LandscapeEditorDetailCustomization_ResizeLandscape.h"
# include "LandscapeEditorDetailCustomization_CopyPaste.h"
# include "LandscapeEditorDetailCustomization_MiscTools.h"
# include "LandscapeEditorDetailCustomization_AlphaBrush.h"
2020-11-04 09:21:48 -04:00
# include "LandscapeEditorDetailCustomization_ImportExport.h"
2016-11-23 15:48:37 -05:00
# include "DetailWidgetRow.h"
# include "LandscapeEditorDetailCustomization_TargetLayers.h"
2014-03-14 14:13:41 -04:00
# include "DetailCategoryBuilder.h"
# include "DetailLayoutBuilder.h"
2019-12-19 18:07:47 -05:00
# include "Classes/EditorStyleSettings.h"
# include "Editor/PropertyEditor/Public/VariablePrecisionNumericInterface.h"
2014-03-14 14:13:41 -04:00
2019-12-19 18:07:47 -05:00
# include "Templates/SharedPointer.h"
# include "SLandscapeEditor.h"
2014-03-14 14:13:41 -04:00
# include "LandscapeEditorCommands.h"
# include "LandscapeEditorDetailWidgets.h"
2019-03-28 13:48:03 -04:00
# include "LandscapeEditorDetailCustomization_LayersBrushStack.h"
2019-12-19 18:07:47 -05:00
# include "LandscapeEditorObject.h"
2019-05-09 08:54:19 -04:00
# include "Landscape.h"
2014-03-14 14:13:41 -04:00
# define LOCTEXT_NAMESPACE "LandscapeEditor"
TSharedRef < IDetailCustomization > FLandscapeEditorDetails : : MakeInstance ( )
{
return MakeShareable ( new FLandscapeEditorDetails ) ;
}
void FLandscapeEditorDetails : : CustomizeDetails ( IDetailLayoutBuilder & DetailBuilder )
{
2015-07-15 04:55:45 -04:00
FEdModeLandscape * LandscapeEdMode = GetEditorMode ( ) ;
CommandList = LandscapeEdMode - > GetUICommandList ( ) ;
2014-03-14 14:13:41 -04:00
static const FLinearColor BorderColor = FLinearColor ( 0.2f , 0.2f , 0.2f , 0.2f ) ;
2014-07-17 12:20:34 -04:00
static const FSlateBrush * BorderStyle = FEditorStyle : : GetBrush ( " DetailsView.GroupSection " ) ;
2014-03-14 14:13:41 -04:00
2014-12-01 11:19:41 -05:00
IDetailCategoryBuilder & LandscapeEditorCategory = DetailBuilder . EditCategory ( " LandscapeEditor " , FText : : GetEmpty ( ) , ECategoryPriority : : TypeSpecific ) ;
2014-03-14 14:13:41 -04:00
2014-12-01 11:19:41 -05:00
LandscapeEditorCategory . AddCustomRow ( FText : : GetEmpty ( ) )
2014-03-14 14:13:41 -04:00
. Visibility ( TAttribute < EVisibility > : : Create ( TAttribute < EVisibility > : : FGetter : : CreateStatic ( & FLandscapeEditorDetails : : GetTargetLandscapeSelectorVisibility ) ) )
[
SNew ( SComboButton )
. OnGetMenuContent_Static ( & FLandscapeEditorDetails : : GetTargetLandscapeMenu )
. ButtonContent ( )
[
SNew ( STextBlock )
2014-07-03 04:57:42 -04:00
. Text_Static ( & FLandscapeEditorDetails : : GetTargetLandscapeName )
2014-03-14 14:13:41 -04:00
]
] ;
2019-05-21 08:07:49 -04:00
2019-05-09 08:54:19 -04:00
FText Reason ;
bool bDisabledEditing = LandscapeEdMode - > CurrentToolTarget . LandscapeInfo . IsValid ( ) & & ! LandscapeEdMode - > CanEditCurrentTarget ( & Reason ) ;
if ( bDisabledEditing )
{
LandscapeEditorCategory . AddCustomRow ( FText : : GetEmpty ( ) )
[
SNew ( SMultiLineEditableTextBox )
. IsReadOnly ( true )
. AutoWrapText ( true )
. Font ( FCoreStyle : : GetDefaultFontStyle ( " Bold " , 10 ) )
. Justification ( ETextJustify : : Center )
. BackgroundColor ( FCoreStyle : : Get ( ) . GetColor ( " ErrorReporting.BackgroundColor " ) )
. ForegroundColor ( FCoreStyle : : Get ( ) . GetColor ( " ErrorReporting.ForegroundColor " ) )
. Text ( Reason )
] ;
}
// Only continue cuztomization if we are in NewLandscape mode or if editing is not disabled
if ( bDisabledEditing & & LandscapeEdMode - > CurrentTool - > GetToolName ( ) ! = FName ( " NewLandscape " ) )
{
return ;
}
2020-07-17 14:42:23 -04:00
// Custom Brush Selectors
TSharedPtr < SSegmentedControl < FName > > BrushSelectors = SNew ( SSegmentedControl < FName > )
. OnValueChanged ( this , & FLandscapeEditorDetails : : SetBrushCommand )
. Value ( this , & FLandscapeEditorDetails : : GetCurrentBrushFName ) ;
for ( FName BrushName : LandscapeEdMode - > CurrentTool - > ValidBrushes )
2014-03-14 14:13:41 -04:00
{
2020-07-17 14:42:23 -04:00
TSharedPtr < FUICommandInfo > Command = FLandscapeEditorCommands : : Get ( ) . NameToCommandMap . FindRef ( BrushName ) ;
if ( Command . IsValid ( ) )
{
BrushSelectors - > AddSlot ( BrushName )
2020-08-27 08:57:07 -04:00
. Icon ( Command - > GetIcon ( ) . GetIcon ( ) )
. ToolTip ( Command - > GetDescription ( ) ) ;
2020-07-17 14:42:23 -04:00
}
2014-03-14 14:13:41 -04:00
}
2020-08-27 08:57:07 -04:00
BrushSelectors - > RebuildChildren ( ) ;
2014-03-14 14:13:41 -04:00
2020-07-17 14:42:23 -04:00
TSharedPtr < SSegmentedControl < FName > > FalloffSelectors = SNew ( SSegmentedControl < FName > )
2020-08-27 08:57:07 -04:00
. OnValueChanged ( this , & FLandscapeEditorDetails : : SetBrushCommand )
. Value ( this , & FLandscapeEditorDetails : : GetCurrentBrushFalloffFName )
+ SSegmentedControl < FName > : : Slot ( FName ( " Circle_Smooth " ) ) . Icon ( FLandscapeEditorCommands : : Get ( ) . CircleBrush_Smooth - > GetIcon ( ) . GetIcon ( ) ) . ToolTip ( FLandscapeEditorCommands : : Get ( ) . CircleBrush_Smooth - > GetDescription ( ) )
+ SSegmentedControl < FName > : : Slot ( FName ( " Circle_Linear " ) ) . Icon ( FLandscapeEditorCommands : : Get ( ) . CircleBrush_Linear - > GetIcon ( ) . GetIcon ( ) ) . ToolTip ( FLandscapeEditorCommands : : Get ( ) . CircleBrush_Linear - > GetDescription ( ) )
+ SSegmentedControl < FName > : : Slot ( FName ( " Circle_Spherical " ) ) . Icon ( FLandscapeEditorCommands : : Get ( ) . CircleBrush_Spherical - > GetIcon ( ) . GetIcon ( ) ) . ToolTip ( FLandscapeEditorCommands : : Get ( ) . CircleBrush_Spherical - > GetDescription ( ) )
+ SSegmentedControl < FName > : : Slot ( FName ( " Circle_Tip " ) ) . Icon ( FLandscapeEditorCommands : : Get ( ) . CircleBrush_Tip - > GetIcon ( ) . GetIcon ( ) ) . ToolTip ( FLandscapeEditorCommands : : Get ( ) . CircleBrush_Tip - > GetDescription ( ) ) ;
2020-07-17 14:42:23 -04:00
2014-12-01 11:19:41 -05:00
LandscapeEditorCategory . AddCustomRow ( FText : : GetEmpty ( ) )
2020-07-17 14:42:23 -04:00
. Visibility ( TAttribute < EVisibility > : : Create ( TAttribute < EVisibility > : : FGetter : : CreateSP ( this , & FLandscapeEditorDetails : : GetBrushSelectorVisibility ) ) )
. NameContent ( )
. HAlign ( HAlign_Right )
2014-03-14 14:13:41 -04:00
[
2020-07-17 14:42:23 -04:00
SNew ( STextBlock )
. TextStyle ( & FCoreStyle : : Get ( ) . GetWidgetStyle < FTextBlockStyle > ( " SmallText " ) )
. Text ( LOCTEXT ( " BrushSelector " , " Brush Type " ) )
]
. ValueContent ( )
[
BrushSelectors . ToSharedRef ( )
] ;
LandscapeEditorCategory . AddCustomRow ( FText : : GetEmpty ( ) )
. Visibility ( TAttribute < EVisibility > : : Create ( TAttribute < EVisibility > : : FGetter : : CreateSP ( this , & FLandscapeEditorDetails : : GetBrushFalloffSelectorVisibility ) ) )
. NameContent ( )
. HAlign ( HAlign_Right )
[
SNew ( STextBlock )
. TextStyle ( & FCoreStyle : : Get ( ) . GetWidgetStyle < FTextBlockStyle > ( " SmallText " ) )
. Text ( LOCTEXT ( " BrushFalloff " , " Brush Falloff " ) )
]
. ValueContent ( )
[
FalloffSelectors . ToSharedRef ( )
2014-03-14 14:13:41 -04:00
] ;
// Tools:
Customization_NewLandscape = MakeShareable ( new FLandscapeEditorDetailCustomization_NewLandscape ) ;
Customization_NewLandscape - > CustomizeDetails ( DetailBuilder ) ;
2020-11-04 09:21:48 -04:00
Customization_ImportExport = MakeShareable ( new FLandscapeEditorDetailCustomization_ImportExport ) ;
Customization_ImportExport - > CustomizeDetails ( DetailBuilder ) ;
2014-03-14 14:13:41 -04:00
Customization_ResizeLandscape = MakeShareable ( new FLandscapeEditorDetailCustomization_ResizeLandscape ) ;
Customization_ResizeLandscape - > CustomizeDetails ( DetailBuilder ) ;
Customization_CopyPaste = MakeShareable ( new FLandscapeEditorDetailCustomization_CopyPaste ) ;
Customization_CopyPaste - > CustomizeDetails ( DetailBuilder ) ;
Customization_MiscTools = MakeShareable ( new FLandscapeEditorDetailCustomization_MiscTools ) ;
Customization_MiscTools - > CustomizeDetails ( DetailBuilder ) ;
// Brushes:
Customization_AlphaBrush = MakeShareable ( new FLandscapeEditorDetailCustomization_AlphaBrush ) ;
Customization_AlphaBrush - > CustomizeDetails ( DetailBuilder ) ;
2019-05-16 16:14:30 -04:00
if ( LandscapeEdMode - > CanHaveLandscapeLayersContent ( ) )
2019-01-08 11:38:48 -05:00
{
2019-03-28 13:48:03 -04:00
// Layers
Customization_Layers = MakeShareable ( new FLandscapeEditorDetailCustomization_Layers ) ;
Customization_Layers - > CustomizeDetails ( DetailBuilder ) ;
2019-03-21 09:05:32 -04:00
// Brush Stack
2019-03-28 13:48:03 -04:00
Customization_LayersBrushStack = MakeShareable ( new FLandscapeEditorDetailCustomization_LayersBrushStack ) ;
Customization_LayersBrushStack - > CustomizeDetails ( DetailBuilder ) ;
2019-01-08 11:38:48 -05:00
}
2019-03-21 09:05:32 -04:00
// Target Layers:
Customization_TargetLayers = MakeShareable ( new FLandscapeEditorDetailCustomization_TargetLayers ) ;
Customization_TargetLayers - > CustomizeDetails ( DetailBuilder ) ;
2014-03-14 14:13:41 -04:00
}
2014-07-17 12:20:34 -04:00
FText FLandscapeEditorDetails : : GetLocalizedName ( FString Name )
2014-03-14 14:13:41 -04:00
{
static bool bInitialized = false ;
if ( ! bInitialized )
{
2019-05-16 16:14:30 -04:00
FEdModeLandscape * LandscapeEdMode = GetEditorMode ( ) ;
2014-03-14 14:13:41 -04:00
bInitialized = true ;
LOCTEXT ( " ToolSet_NewLandscape " , " New Landscape " ) ;
LOCTEXT ( " ToolSet_ResizeLandscape " , " Change Component Size " ) ;
LOCTEXT ( " ToolSet_Sculpt " , " Sculpt " ) ;
2019-05-07 07:29:12 -04:00
LOCTEXT ( " ToolSet_Erase " , " Erase " ) ;
2014-03-14 14:13:41 -04:00
LOCTEXT ( " ToolSet_Paint " , " Paint " ) ;
LOCTEXT ( " ToolSet_Smooth " , " Smooth " ) ;
LOCTEXT ( " ToolSet_Flatten " , " Flatten " ) ;
LOCTEXT ( " ToolSet_Ramp " , " Ramp " ) ;
LOCTEXT ( " ToolSet_Erosion " , " Erosion " ) ;
LOCTEXT ( " ToolSet_HydraErosion " , " HydroErosion " ) ;
LOCTEXT ( " ToolSet_Noise " , " Noise " ) ;
LOCTEXT ( " ToolSet_Retopologize " , " Retopologize " ) ;
LOCTEXT ( " ToolSet_Visibility " , " Visibility " ) ;
2019-06-14 09:26:08 -04:00
LOCTEXT ( " ToolSet_BlueprintBrush " , " Blueprint Brushes " ) ;
2014-03-14 14:13:41 -04:00
LOCTEXT ( " ToolSet_Select " , " Selection " ) ;
LOCTEXT ( " ToolSet_AddComponent " , " Add " ) ;
LOCTEXT ( " ToolSet_DeleteComponent " , " Delete " ) ;
LOCTEXT ( " ToolSet_MoveToLevel " , " Move to Level " ) ;
LOCTEXT ( " ToolSet_Mask " , " Selection " ) ;
LOCTEXT ( " ToolSet_CopyPaste " , " Copy/Paste " ) ;
2015-09-03 05:28:49 -04:00
LOCTEXT ( " ToolSet_Mirror " , " Mirror " ) ;
2014-03-14 14:13:41 -04:00
LOCTEXT ( " ToolSet_Splines " , " Edit Splines " ) ;
LOCTEXT ( " BrushSet_Circle " , " Circle " ) ;
LOCTEXT ( " BrushSet_Alpha " , " Alpha " ) ;
LOCTEXT ( " BrushSet_Pattern " , " Pattern " ) ;
LOCTEXT ( " BrushSet_Component " , " Component " ) ;
LOCTEXT ( " BrushSet_Gizmo " , " Gizmo " ) ;
2019-12-19 18:07:47 -05:00
LOCTEXT ( " BrushSet_Dummy " , " NoBrush " ) ;
2020-04-08 10:57:06 -04:00
LOCTEXT ( " BrushSet_Splines " , " Splines " ) ;
2014-03-14 14:13:41 -04:00
LOCTEXT ( " Circle_Smooth " , " Smooth " ) ;
LOCTEXT ( " Circle_Linear " , " Linear " ) ;
LOCTEXT ( " Circle_Spherical " , " Spherical " ) ;
LOCTEXT ( " Circle_Tip " , " Tip " ) ;
2019-12-19 18:07:47 -05:00
LOCTEXT ( " Circle_Dummy " , " NoBrush " ) ;
2014-03-14 14:13:41 -04:00
}
FText Result ;
2014-09-08 15:22:15 -04:00
ensure ( FText : : FindText ( TEXT ( " LandscapeEditor " ) , Name , Result ) ) ;
2014-03-14 14:13:41 -04:00
return Result ;
}
EVisibility FLandscapeEditorDetails : : GetTargetLandscapeSelectorVisibility ( )
{
FEdModeLandscape * LandscapeEdMode = GetEditorMode ( ) ;
if ( LandscapeEdMode & & LandscapeEdMode - > GetLandscapeList ( ) . Num ( ) > 1 )
{
return EVisibility : : Visible ;
}
return EVisibility : : Collapsed ;
}
FText FLandscapeEditorDetails : : GetTargetLandscapeName ( )
{
FEdModeLandscape * LandscapeEdMode = GetEditorMode ( ) ;
2015-05-11 22:58:28 -04:00
if ( LandscapeEdMode )
2014-03-14 14:13:41 -04:00
{
2015-05-11 22:58:28 -04:00
ULandscapeInfo * Info = LandscapeEdMode - > CurrentToolTarget . LandscapeInfo . Get ( ) ;
if ( Info )
{
ALandscapeProxy * Proxy = Info - > GetLandscapeProxy ( ) ;
if ( Proxy )
{
return FText : : FromString ( Proxy - > GetActorLabel ( ) ) ;
}
}
2014-03-14 14:13:41 -04:00
}
return FText ( ) ;
}
TSharedRef < SWidget > FLandscapeEditorDetails : : GetTargetLandscapeMenu ( )
{
FEdModeLandscape * LandscapeEdMode = GetEditorMode ( ) ;
if ( LandscapeEdMode )
{
FMenuBuilder MenuBuilder ( true , NULL ) ;
const TArray < FLandscapeListInfo > & LandscapeList = LandscapeEdMode - > GetLandscapeList ( ) ;
for ( auto It = LandscapeList . CreateConstIterator ( ) ; It ; It + + )
{
2017-12-12 18:32:45 -05:00
FUIAction Action = FUIAction ( FExecuteAction : : CreateStatic ( & FLandscapeEditorDetails : : OnChangeTargetLandscape , MakeWeakObjectPtr ( It - > Info ) ) ) ;
2014-07-17 12:20:34 -04:00
MenuBuilder . AddMenuEntry ( FText : : FromString ( It - > Info - > GetLandscapeProxy ( ) - > GetActorLabel ( ) ) , FText ( ) , FSlateIcon ( ) , Action ) ;
2014-03-14 14:13:41 -04:00
}
return MenuBuilder . MakeWidget ( ) ;
}
return SNullWidget : : NullWidget ;
}
void FLandscapeEditorDetails : : OnChangeTargetLandscape ( TWeakObjectPtr < ULandscapeInfo > LandscapeInfo )
{
FEdModeLandscape * LandscapeEdMode = GetEditorMode ( ) ;
if ( LandscapeEdMode )
{
2019-04-05 09:55:48 -04:00
LandscapeEdMode - > SetTargetLandscape ( LandscapeInfo ) ;
2014-03-14 14:13:41 -04:00
}
}
FText FLandscapeEditorDetails : : GetCurrentToolName ( ) const
{
FEdModeLandscape * LandscapeEdMode = GetEditorMode ( ) ;
2014-07-17 12:20:34 -04:00
if ( LandscapeEdMode ! = NULL & & LandscapeEdMode - > CurrentTool ! = NULL )
2014-03-14 14:13:41 -04:00
{
2014-07-17 12:20:34 -04:00
const TCHAR * CurrentToolName = LandscapeEdMode - > CurrentTool - > GetToolName ( ) ;
return GetLocalizedName ( FString ( " ToolSet_ " ) + CurrentToolName ) ;
2014-03-14 14:13:41 -04:00
}
return LOCTEXT ( " Unknown " , " Unknown " ) ;
}
FSlateIcon FLandscapeEditorDetails : : GetCurrentToolIcon ( ) const
{
FEdModeLandscape * LandscapeEdMode = GetEditorMode ( ) ;
2014-07-17 12:20:34 -04:00
if ( LandscapeEdMode ! = NULL & & LandscapeEdMode - > CurrentTool ! = NULL )
2014-03-14 14:13:41 -04:00
{
2014-07-17 12:20:34 -04:00
const TCHAR * CurrentToolName = LandscapeEdMode - > CurrentTool - > GetToolName ( ) ;
return FLandscapeEditorCommands : : Get ( ) . NameToCommandMap . FindChecked ( * ( FString ( " Tool_ " ) + CurrentToolName ) ) - > GetIcon ( ) ;
2014-03-14 14:13:41 -04:00
}
return FSlateIcon ( FEditorStyle : : GetStyleSetName ( ) , " Default " ) ;
}
TSharedRef < SWidget > FLandscapeEditorDetails : : GetToolSelector ( )
{
FEdModeLandscape * LandscapeEdMode = GetEditorMode ( ) ;
if ( LandscapeEdMode ! = NULL )
{
auto NameToCommandMap = FLandscapeEditorCommands : : Get ( ) . NameToCommandMap ;
FToolMenuBuilder MenuBuilder ( true , CommandList ) ;
if ( LandscapeEdMode - > CurrentToolMode - > ToolModeName = = " ToolMode_Manage " )
{
MenuBuilder . BeginSection ( NAME_None , LOCTEXT ( " NewLandscapeToolsTitle " , " New Landscape " ) ) ;
2014-07-17 12:20:34 -04:00
MenuBuilder . AddToolButton ( NameToCommandMap . FindChecked ( " Tool_NewLandscape " ) , NAME_None , LOCTEXT ( " Tool.NewLandscape " , " New Landscape " ) , LOCTEXT ( " Tool.NewLandscape.Tooltip " , " Create or import a new landscape " ) ) ;
2014-03-14 14:13:41 -04:00
MenuBuilder . EndSection ( ) ;
MenuBuilder . BeginSection ( NAME_None , LOCTEXT ( " ComponentToolsTitle " , " Component Tools " ) ) ;
2014-07-17 12:20:34 -04:00
MenuBuilder . AddToolButton ( NameToCommandMap . FindChecked ( " Tool_Select " ) , NAME_None , LOCTEXT ( " Tool.SelectComponent " , " Selection " ) , LOCTEXT ( " Tool.SelectComponent.Tooltip " , " Select components to use with other tools " ) ) ;
MenuBuilder . AddToolButton ( NameToCommandMap . FindChecked ( " Tool_AddComponent " ) , NAME_None , LOCTEXT ( " Tool.AddComponent " , " Add " ) , LOCTEXT ( " Tool.AddComponent.Tooltip " , " Add components to the landscape " ) ) ;
MenuBuilder . AddToolButton ( NameToCommandMap . FindChecked ( " Tool_DeleteComponent " ) , NAME_None , LOCTEXT ( " Tool.DeleteComponent " , " Delete " ) , LOCTEXT ( " Tool.DeleteComponent.Tooltip " , " Delete components from the landscape, leaving a hole " ) ) ;
2017-03-10 15:37:02 -05:00
MenuBuilder . AddToolButton ( NameToCommandMap . FindChecked ( " Tool_MoveToLevel " ) , NAME_None , LOCTEXT ( " Tool.MoveToLevel " , " Move to Level " ) , LOCTEXT ( " Tool.MoveToLevel.Tooltip " , " Move landscape components to a landscape proxy in the currently active streaming level, so that they can be streamed in/out independently of the rest of the landscape " ) ) ;
2014-07-17 12:20:34 -04:00
MenuBuilder . AddToolButton ( NameToCommandMap . FindChecked ( " Tool_ResizeLandscape " ) , NAME_None , LOCTEXT ( " Tool.ResizeLandscape " , " Change Component Size " ) , LOCTEXT ( " Tool.ResizeLandscape.Tooltip " , " Change the size of the landscape components " ) ) ;
2014-03-14 14:13:41 -04:00
MenuBuilder . EndSection ( ) ;
MenuBuilder . BeginSection ( NAME_None , LOCTEXT ( " SplineToolsTitle " , " Spline Tools " ) ) ;
2014-07-17 12:20:34 -04:00
MenuBuilder . AddToolButton ( NameToCommandMap . FindChecked ( " Tool_Splines " ) , NAME_None , LOCTEXT ( " Tool.Spline " , " Edit Splines " ) , LOCTEXT ( " Tool.Spline.Tooltip " , " Ctrl+click to add control points \n Having a control point selected when you ctrl+click will connect to the new control point with a segment \n Spline mesh settings can be found on the details panel when you have segments selected " ) ) ;
2014-03-14 14:13:41 -04:00
MenuBuilder . EndSection ( ) ;
}
if ( LandscapeEdMode - > CurrentToolMode - > ToolModeName = = " ToolMode_Sculpt " )
{
MenuBuilder . BeginSection ( NAME_None , LOCTEXT ( " SculptToolsTitle " , " Sculpting Tools " ) ) ;
2014-07-17 12:20:34 -04:00
MenuBuilder . AddToolButton ( NameToCommandMap . FindChecked ( " Tool_Sculpt " ) , NAME_None , LOCTEXT ( " Tool.Sculpt " , " Sculpt " ) , LOCTEXT ( " Tool.Sculpt.Tooltip " , " Sculpt height data. \n Ctrl+Click to Raise, Ctrl+Shift+Click to lower " ) ) ;
2019-05-07 07:29:12 -04:00
2019-05-16 16:14:30 -04:00
if ( LandscapeEdMode - > CanHaveLandscapeLayersContent ( ) )
2019-05-07 07:29:12 -04:00
{
MenuBuilder . AddToolButton ( NameToCommandMap . FindChecked ( " Tool_Erase " ) , NAME_None , LOCTEXT ( " Tool.Erase " , " Erase " ) , LOCTEXT ( " Tool.Erase.Tooltip " , " Erase height data. " ) ) ;
}
2014-07-17 12:20:34 -04:00
MenuBuilder . AddToolButton ( NameToCommandMap . FindChecked ( " Tool_Smooth " ) , NAME_None , LOCTEXT ( " Tool.Smooth " , " Smooth " ) , LOCTEXT ( " Tool.Smooth.Tooltip " , " Smooths heightmaps or blend layers " ) ) ;
MenuBuilder . AddToolButton ( NameToCommandMap . FindChecked ( " Tool_Flatten " ) , NAME_None , LOCTEXT ( " Tool.Flatten " , " Flatten " ) , LOCTEXT ( " Tool.Flatten.Tooltip " , " Flattens an area of heightmap or blend layer " ) ) ;
MenuBuilder . AddToolButton ( NameToCommandMap . FindChecked ( " Tool_Ramp " ) , NAME_None , LOCTEXT ( " Tool.Ramp " , " Ramp " ) , LOCTEXT ( " Tool.Ramp.Tooltip " , " Creates a ramp between two points " ) ) ;
MenuBuilder . AddToolButton ( NameToCommandMap . FindChecked ( " Tool_Erosion " ) , NAME_None , LOCTEXT ( " Tool.Erosion " , " Erosion " ) , LOCTEXT ( " Tool.Erosion.Tooltip " , " Thermal Erosion - Simulates erosion caused by the movement of soil from higher areas to lower areas " ) ) ;
MenuBuilder . AddToolButton ( NameToCommandMap . FindChecked ( " Tool_HydraErosion " ) , NAME_None , LOCTEXT ( " Tool.HydroErosion " , " Hydro Erosion " ) , LOCTEXT ( " Tool.HydroErosion.Tooltip " , " Hydro Erosion - Simulates erosion caused by rainfall " ) ) ;
MenuBuilder . AddToolButton ( NameToCommandMap . FindChecked ( " Tool_Noise " ) , NAME_None , LOCTEXT ( " Tool.Noise " , " Noise " ) , LOCTEXT ( " Tool.Noise.Tooltip " , " Adds noise to the heightmap or blend layer " ) ) ;
MenuBuilder . AddToolButton ( NameToCommandMap . FindChecked ( " Tool_Retopologize " ) , NAME_None , LOCTEXT ( " Tool.Retopologize " , " Retopologize " ) , LOCTEXT ( " Tool.Retopologize.Tooltip " , " Automatically adjusts landscape vertices with an X/Y offset map to improve vertex density on cliffs, reducing texture stretching. \n Note: An X/Y offset map makes the landscape slower to render and paint on with other tools, so only use if needed " ) ) ;
MenuBuilder . AddToolButton ( NameToCommandMap . FindChecked ( " Tool_Visibility " ) , NAME_None , LOCTEXT ( " Tool.Visibility " , " Visibility " ) , LOCTEXT ( " Tool.Visibility.Tooltip " , " Mask out individual quads in the landscape, leaving a hole. " ) ) ;
2019-01-08 11:38:48 -05:00
2019-05-16 16:14:30 -04:00
if ( LandscapeEdMode - > CanHaveLandscapeLayersContent ( ) )
2019-01-08 11:38:48 -05:00
{
2019-06-05 11:09:58 -04:00
MenuBuilder . AddToolButton ( NameToCommandMap . FindChecked ( " Tool_BlueprintBrush " ) , NAME_None , LOCTEXT ( " Tool.SculptBlueprintBrush " , " Blueprint Brushes " ) , LOCTEXT ( " Tool.SculptBlueprintBrush.Tooltip " , " Custom sculpting tools created using Blueprint. " ) ) ;
2019-01-08 11:38:48 -05:00
}
2014-03-14 14:13:41 -04:00
MenuBuilder . EndSection ( ) ;
MenuBuilder . BeginSection ( NAME_None , LOCTEXT ( " RegionToolsTitle " , " Region Tools " ) ) ;
2014-07-17 12:20:34 -04:00
MenuBuilder . AddToolButton ( NameToCommandMap . FindChecked ( " Tool_Mask " ) , NAME_None , LOCTEXT ( " Tool.RegionSelect " , " Selection " ) , LOCTEXT ( " Tool.RegionSelect.Tooltip " , " Select a region of landscape to use as a mask for other tools " ) ) ;
MenuBuilder . AddToolButton ( NameToCommandMap . FindChecked ( " Tool_CopyPaste " ) , NAME_None , LOCTEXT ( " Tool.RegionCopyPaste " , " Copy/Paste " ) , LOCTEXT ( " Tool.RegionCopyPaste.Tooltip " , " Copy/Paste areas of the landscape, or import/export a copied area of landscape from disk " ) ) ;
2015-09-03 05:28:49 -04:00
MenuBuilder . AddToolButton ( NameToCommandMap . FindChecked ( " Tool_Mirror " ) , NAME_None , LOCTEXT ( " Tool.Mirror " , " Mirror " ) , LOCTEXT ( " Tool.Mirror.Tooltip " , " Copies one side of a landscape to the other, to easily create a mirrored landscape. " ) ) ;
2014-03-14 14:13:41 -04:00
MenuBuilder . EndSection ( ) ;
}
if ( LandscapeEdMode - > CurrentToolMode - > ToolModeName = = " ToolMode_Paint " )
{
MenuBuilder . BeginSection ( NAME_None , LOCTEXT ( " PaintToolsTitle " , " Paint Tools " ) ) ;
2014-07-17 12:20:34 -04:00
MenuBuilder . AddToolButton ( NameToCommandMap . FindChecked ( " Tool_Paint " ) , NAME_None , LOCTEXT ( " Tool.Paint " , " Paint " ) , LOCTEXT ( " Tool.Paint.Tooltip " , " Paints weight data. \n Ctrl+Click to paint, Ctrl+Shift+Click to erase " ) ) ;
MenuBuilder . AddToolButton ( NameToCommandMap . FindChecked ( " Tool_Smooth " ) , NAME_None , LOCTEXT ( " Tool.Smooth " , " Smooth " ) , LOCTEXT ( " Tool.Smooth.Tooltip " , " Smooths heightmaps or blend layers " ) ) ;
MenuBuilder . AddToolButton ( NameToCommandMap . FindChecked ( " Tool_Flatten " ) , NAME_None , LOCTEXT ( " Tool.Flatten " , " Flatten " ) , LOCTEXT ( " Tool.Flatten.Tooltip " , " Flattens an area of heightmap or blend layer " ) ) ;
MenuBuilder . AddToolButton ( NameToCommandMap . FindChecked ( " Tool_Noise " ) , NAME_None , LOCTEXT ( " Tool.Noise " , " Noise " ) , LOCTEXT ( " Tool.Noise.Tooltip " , " Adds noise to the heightmap or blend layer " ) ) ;
2019-01-08 11:38:48 -05:00
2019-05-16 16:14:30 -04:00
if ( LandscapeEdMode - > CanHaveLandscapeLayersContent ( ) )
2019-01-08 11:38:48 -05:00
{
2019-06-05 11:09:58 -04:00
MenuBuilder . AddToolButton ( NameToCommandMap . FindChecked ( " Tool_BlueprintBrush " ) , NAME_None , LOCTEXT ( " Tool.PaintBlueprintBrush " , " Blueprint Brushes " ) , LOCTEXT ( " Tool.PaintBlueprintBrush.Tooltip " , " Custom painting tools created using Blueprint. " ) ) ;
2019-01-08 11:38:48 -05:00
}
2014-03-14 14:13:41 -04:00
MenuBuilder . EndSection ( ) ;
}
return MenuBuilder . MakeWidget ( ) ;
}
return SNullWidget : : NullWidget ;
}
bool FLandscapeEditorDetails : : GetToolSelectorIsVisible ( ) const
{
FEdModeLandscape * LandscapeEdMode = GetEditorMode ( ) ;
2014-07-17 12:20:34 -04:00
if ( LandscapeEdMode & & LandscapeEdMode - > CurrentTool )
2014-03-14 14:13:41 -04:00
{
2019-05-09 08:54:19 -04:00
if ( ! LandscapeEdMode - > CanEditCurrentTarget ( ) )
{
return false ;
}
2014-07-17 12:20:34 -04:00
if ( ! IsToolActive ( " NewLandscape " ) | | LandscapeEdMode - > GetLandscapeList ( ) . Num ( ) > 0 )
2014-03-14 14:13:41 -04:00
{
return true ;
}
}
return false ;
}
EVisibility FLandscapeEditorDetails : : GetToolSelectorVisibility ( ) const
{
if ( GetToolSelectorIsVisible ( ) )
{
return EVisibility : : Visible ;
}
return EVisibility : : Collapsed ;
}
2020-07-17 14:42:23 -04:00
FName FLandscapeEditorDetails : : GetCurrentBrushFName ( ) const
{
FEdModeLandscape * LandscapeEdMode = GetEditorMode ( ) ;
if ( LandscapeEdMode ! = NULL & & LandscapeEdMode - > CurrentBrush ! = NULL )
{
return LandscapeEdMode - > LandscapeBrushSets [ LandscapeEdMode - > CurrentBrushSetIndex ] . BrushSetName ;
}
return NAME_None ;
}
2014-03-14 14:13:41 -04:00
FText FLandscapeEditorDetails : : GetCurrentBrushName ( ) const
{
FEdModeLandscape * LandscapeEdMode = GetEditorMode ( ) ;
if ( LandscapeEdMode ! = NULL & & LandscapeEdMode - > CurrentBrush ! = NULL )
{
const FName CurrentBrushSetName = LandscapeEdMode - > LandscapeBrushSets [ LandscapeEdMode - > CurrentBrushSetIndex ] . BrushSetName ;
2014-07-17 12:20:34 -04:00
return GetLocalizedName ( CurrentBrushSetName . ToString ( ) ) ;
2014-03-14 14:13:41 -04:00
}
return LOCTEXT ( " Unknown " , " Unknown " ) ;
}
FSlateIcon FLandscapeEditorDetails : : GetCurrentBrushIcon ( ) const
{
FEdModeLandscape * LandscapeEdMode = GetEditorMode ( ) ;
if ( LandscapeEdMode ! = NULL & & LandscapeEdMode - > CurrentBrush ! = NULL )
{
const FName CurrentBrushSetName = LandscapeEdMode - > LandscapeBrushSets [ LandscapeEdMode - > CurrentBrushSetIndex ] . BrushSetName ;
TSharedPtr < FUICommandInfo > Command = FLandscapeEditorCommands : : Get ( ) . NameToCommandMap . FindRef ( CurrentBrushSetName ) ;
if ( Command . IsValid ( ) )
{
return Command - > GetIcon ( ) ;
}
}
return FSlateIcon ( FEditorStyle : : GetStyleSetName ( ) , " Default " ) ;
}
TSharedRef < SWidget > FLandscapeEditorDetails : : GetBrushSelector ( )
{
FEdModeLandscape * LandscapeEdMode = GetEditorMode ( ) ;
2014-07-17 12:20:34 -04:00
if ( LandscapeEdMode & & LandscapeEdMode - > CurrentTool )
2014-03-14 14:13:41 -04:00
{
auto NameToCommandMap = FLandscapeEditorCommands : : Get ( ) . NameToCommandMap ;
FToolMenuBuilder MenuBuilder ( true , CommandList ) ;
MenuBuilder . BeginSection ( NAME_None , LOCTEXT ( " BrushesTitle " , " Brushes " ) ) ;
2014-07-17 12:20:34 -04:00
if ( LandscapeEdMode - > CurrentTool - > ValidBrushes . Contains ( " BrushSet_Circle " ) )
2014-03-14 14:13:41 -04:00
{
MenuBuilder . AddToolButton ( NameToCommandMap . FindChecked ( " BrushSet_Circle " ) , NAME_None , LOCTEXT ( " Brush.Circle " , " Circle " ) , LOCTEXT ( " Brush.Circle.Brushtip " , " Simple circular brush " ) ) ;
}
2014-07-17 12:20:34 -04:00
if ( LandscapeEdMode - > CurrentTool - > ValidBrushes . Contains ( " BrushSet_Alpha " ) )
2014-03-14 14:13:41 -04:00
{
MenuBuilder . AddToolButton ( NameToCommandMap . FindChecked ( " BrushSet_Alpha " ) , NAME_None , LOCTEXT ( " Brush.Alpha.Alpha " , " Alpha " ) , LOCTEXT ( " Brush.Alpha.Alpha.Tooltip " , " Alpha brush, orients a mask image with the brush stroke " ) ) ;
}
2014-07-17 12:20:34 -04:00
if ( LandscapeEdMode - > CurrentTool - > ValidBrushes . Contains ( " BrushSet_Pattern " ) )
2014-03-14 14:13:41 -04:00
{
MenuBuilder . AddToolButton ( NameToCommandMap . FindChecked ( " BrushSet_Pattern " ) , NAME_None , LOCTEXT ( " Brush.Alpha.Pattern " , " Pattern " ) , LOCTEXT ( " Brush.Alpha.Pattern.Tooltip " , " Pattern brush, tiles a mask image across the landscape " ) ) ;
}
2014-07-17 12:20:34 -04:00
if ( LandscapeEdMode - > CurrentTool - > ValidBrushes . Contains ( " BrushSet_Component " ) )
2014-03-14 14:13:41 -04:00
{
MenuBuilder . AddToolButton ( NameToCommandMap . FindChecked ( " BrushSet_Component " ) , NAME_None , LOCTEXT ( " Brush.Component " , " Component " ) , LOCTEXT ( " Brush.Component.Brushtip " , " Work with entire landscape components " ) ) ;
}
2014-07-17 12:20:34 -04:00
if ( LandscapeEdMode - > CurrentTool - > ValidBrushes . Contains ( " BrushSet_Gizmo " ) )
2014-03-14 14:13:41 -04:00
{
MenuBuilder . AddToolButton ( NameToCommandMap . FindChecked ( " BrushSet_Gizmo " ) , NAME_None , LOCTEXT ( " Brush.Gizmo " , " Gizmo " ) , LOCTEXT ( " Brush.Gizmo.Brushtip " , " Work with the landscape gizmo, used for copy/pasting landscape " ) ) ;
}
2014-07-17 12:20:34 -04:00
//if (LandscapeEdMode->CurrentTool->ValidBrushes.Contains("BrushSet_Splines"))
2014-03-14 14:13:41 -04:00
//{
// MenuBuilder.AddToolButton(NameToCommandMap.FindChecked("BrushSet_Splines"), NAME_None, LOCTEXT("Brush.Splines", "Splines"), LOCTEXT("Brush.Splines.Brushtip", "Edit Splines"));
//}
MenuBuilder . EndSection ( ) ;
return MenuBuilder . MakeWidget ( ) ;
}
return SNullWidget : : NullWidget ;
}
bool FLandscapeEditorDetails : : GetBrushSelectorIsVisible ( ) const
{
FEdModeLandscape * LandscapeEdMode = GetEditorMode ( ) ;
2014-07-17 12:20:34 -04:00
if ( LandscapeEdMode & & LandscapeEdMode - > CurrentTool )
2014-03-14 14:13:41 -04:00
{
2014-07-17 12:20:34 -04:00
if ( LandscapeEdMode - > CurrentTool - > ValidBrushes . Num ( ) > = 2 )
2014-03-14 14:13:41 -04:00
{
return true ;
}
}
return false ;
}
2020-07-17 14:42:23 -04:00
EVisibility FLandscapeEditorDetails : : GetBrushSelectorVisibility ( ) const
{
return GetBrushSelectorIsVisible ( ) ? EVisibility : : Visible : EVisibility : : Collapsed ;
}
FName FLandscapeEditorDetails : : GetCurrentBrushFalloffFName ( ) const
{
FEdModeLandscape * LandscapeEdMode = GetEditorMode ( ) ;
if ( LandscapeEdMode ! = NULL & & LandscapeEdMode - > CurrentBrush ! = NULL & & GetBrushFalloffSelectorIsVisible ( ) )
{
return LandscapeEdMode - > CurrentBrush - > GetBrushName ( ) ;
}
return NAME_None ;
}
2014-03-14 14:13:41 -04:00
FText FLandscapeEditorDetails : : GetCurrentBrushFalloffName ( ) const
{
FEdModeLandscape * LandscapeEdMode = GetEditorMode ( ) ;
2020-04-28 08:46:36 -04:00
if ( LandscapeEdMode ! = NULL & & LandscapeEdMode - > CurrentBrush ! = NULL & & GetBrushFalloffSelectorIsVisible ( ) )
2014-03-14 14:13:41 -04:00
{
2014-07-17 12:20:34 -04:00
const TCHAR * CurrentBrushName = LandscapeEdMode - > CurrentBrush - > GetBrushName ( ) ;
2014-03-14 14:13:41 -04:00
return GetLocalizedName ( CurrentBrushName ) ;
}
return LOCTEXT ( " Unknown " , " Unknown " ) ;
}
FSlateIcon FLandscapeEditorDetails : : GetCurrentBrushFalloffIcon ( ) const
{
FEdModeLandscape * LandscapeEdMode = GetEditorMode ( ) ;
if ( LandscapeEdMode ! = NULL & & LandscapeEdMode - > CurrentBrush ! = NULL )
{
const FName CurrentBrushName = LandscapeEdMode - > CurrentBrush - > GetBrushName ( ) ;
TSharedPtr < FUICommandInfo > Command = FLandscapeEditorCommands : : Get ( ) . NameToCommandMap . FindRef ( CurrentBrushName ) ;
if ( Command . IsValid ( ) )
{
return Command - > GetIcon ( ) ;
}
}
return FSlateIcon ( FEditorStyle : : GetStyleSetName ( ) , " Default " ) ;
}
2020-07-17 14:42:23 -04:00
void FLandscapeEditorDetails : : SetBrushCommand ( FName InBrush )
{
TSharedPtr < FUICommandInfo > BrushCommand = FLandscapeEditorCommands : : Get ( ) . NameToCommandMap . FindRef ( InBrush ) ;
if ( CommandList . IsValid ( ) & & BrushCommand . IsValid ( ) )
{
CommandList - > ExecuteAction ( BrushCommand . ToSharedRef ( ) ) ;
}
}
2014-03-14 14:13:41 -04:00
TSharedRef < SWidget > FLandscapeEditorDetails : : GetBrushFalloffSelector ( )
{
FEdModeLandscape * LandscapeEdMode = GetEditorMode ( ) ;
2014-07-17 12:20:34 -04:00
if ( LandscapeEdMode & & LandscapeEdMode - > CurrentTool )
2014-03-14 14:13:41 -04:00
{
auto NameToCommandMap = FLandscapeEditorCommands : : Get ( ) . NameToCommandMap ;
FToolMenuBuilder MenuBuilder ( true , CommandList ) ;
MenuBuilder . BeginSection ( NAME_None , LOCTEXT ( " FalloffTitle " , " Falloff " ) ) ;
MenuBuilder . AddToolButton ( FLandscapeEditorCommands : : Get ( ) . CircleBrush_Smooth , NAME_None , LOCTEXT ( " Brush.Circle.Smooth " , " Smooth " ) , LOCTEXT ( " Brush.Circle.Smooth.Tooltip " , " Smooth falloff " ) ) ;
MenuBuilder . AddToolButton ( FLandscapeEditorCommands : : Get ( ) . CircleBrush_Linear , NAME_None , LOCTEXT ( " Brush.Circle.Linear " , " Linear " ) , LOCTEXT ( " Brush.Circle.Linear.Tooltip " , " Sharp, linear falloff " ) ) ;
MenuBuilder . AddToolButton ( FLandscapeEditorCommands : : Get ( ) . CircleBrush_Spherical , NAME_None , LOCTEXT ( " Brush.Circle.Spherical " , " Spherical " ) , LOCTEXT ( " Brush.Circle.Spherical.Tooltip " , " Spherical falloff, smooth at the center and sharp at the edge " ) ) ;
MenuBuilder . AddToolButton ( FLandscapeEditorCommands : : Get ( ) . CircleBrush_Tip , NAME_None , LOCTEXT ( " Brush.Circle.Tip " , " Tip " ) , LOCTEXT ( " Brush.Circle.Tip.Tooltip " , " Tip falloff, sharp at the center and smooth at the edge " ) ) ;
MenuBuilder . EndSection ( ) ;
return MenuBuilder . MakeWidget ( ) ;
}
return SNullWidget : : NullWidget ;
}
bool FLandscapeEditorDetails : : GetBrushFalloffSelectorIsVisible ( ) const
{
FEdModeLandscape * LandscapeEdMode = GetEditorMode ( ) ;
if ( LandscapeEdMode & & LandscapeEdMode - > CurrentBrush ! = NULL )
{
const FLandscapeBrushSet & CurrentBrushSet = LandscapeEdMode - > LandscapeBrushSets [ LandscapeEdMode - > CurrentBrushSetIndex ] ;
if ( CurrentBrushSet . Brushes . Num ( ) > = 2 )
{
return true ;
}
}
return false ;
}
2020-07-17 14:42:23 -04:00
EVisibility FLandscapeEditorDetails : : GetBrushFalloffSelectorVisibility ( ) const
{
return GetBrushFalloffSelectorIsVisible ( ) ? EVisibility : : Visible : EVisibility : : Collapsed ;
}
2019-12-19 18:07:47 -05:00
bool FLandscapeEditorDetails : : IsBrushSetEnabled ( ) const
{
FEdModeLandscape * LandscapeEdMode = GetEditorMode ( ) ;
return ( LandscapeEdMode ! = nullptr & & LandscapeEdMode - > GetLandscapeList ( ) . Num ( ) > 0 ) ;
}
2014-03-14 14:13:41 -04:00
# undef LOCTEXT_NAMESPACE