void FLandscapeToolKit::Init(const TSharedPtr<IToolkitHost>& InitToolkitHost) { auto NameToCommandMap = FLandscapeEditorCommands::Get().NameToCommandMap; FEdModeLandscape* LandscapeEdMode = GetEditorMode(); TSharedRef<FUICommandList> CommandList = LandscapeEdMode->GetUICommandList(); #define MAP_MODE(ModeName) CommandList->MapAction(NameToCommandMap.FindChecked(ModeName), FUIAction(FExecuteAction::CreateSP(this, &FLandscapeToolKit::OnChangeMode, FName(ModeName)), FCanExecuteAction::CreateSP(this, &FLandscapeToolKit::IsModeEnabled, FName(ModeName)), FIsActionChecked::CreateSP(this, &FLandscapeToolKit::IsModeActive, FName(ModeName)))); MAP_MODE("ToolMode_Manage"); MAP_MODE("ToolMode_Sculpt"); MAP_MODE("ToolMode_Paint"); #undef MAP_MODE #define MAP_TOOL(ToolName) CommandList->MapAction(NameToCommandMap.FindChecked("Tool_" ToolName), FUIAction(FExecuteAction::CreateSP(this, &FLandscapeToolKit::OnChangeTool, FName(ToolName)), FCanExecuteAction::CreateSP(this, &FLandscapeToolKit::IsToolEnabled, FName(ToolName)), FIsActionChecked::CreateSP(this, &FLandscapeToolKit::IsToolActive, FName(ToolName)))); MAP_TOOL("NewLandscape"); MAP_TOOL("ResizeLandscape"); MAP_TOOL("Sculpt"); MAP_TOOL("Paint"); MAP_TOOL("Smooth"); MAP_TOOL("Flatten"); MAP_TOOL("Ramp"); MAP_TOOL("Erosion"); MAP_TOOL("HydraErosion"); MAP_TOOL("Noise"); MAP_TOOL("Retopologize"); MAP_TOOL("Visibility"); MAP_TOOL("Select"); MAP_TOOL("AddComponent"); MAP_TOOL("DeleteComponent"); MAP_TOOL("MoveToLevel"); MAP_TOOL("Mask"); MAP_TOOL("CopyPaste"); MAP_TOOL("Mirror"); MAP_TOOL("Splines"); #undef MAP_TOOL #define MAP_BRUSH_SET(BrushSetName) CommandList->MapAction(NameToCommandMap.FindChecked(BrushSetName), FUIAction(FExecuteAction::CreateSP(this, &FLandscapeToolKit::OnChangeBrushSet, FName(BrushSetName)), FCanExecuteAction::CreateSP(this, &FLandscapeToolKit::IsBrushSetEnabled, FName(BrushSetName)), FIsActionChecked::CreateSP(this, &FLandscapeToolKit::IsBrushSetActive, FName(BrushSetName)))); MAP_BRUSH_SET("BrushSet_Circle"); MAP_BRUSH_SET("BrushSet_Alpha"); MAP_BRUSH_SET("BrushSet_Pattern"); MAP_BRUSH_SET("BrushSet_Component"); MAP_BRUSH_SET("BrushSet_Gizmo"); #undef MAP_BRUSH_SET #define MAP_BRUSH(BrushName) CommandList->MapAction(NameToCommandMap.FindChecked(BrushName), FUIAction(FExecuteAction::CreateSP(this, &FLandscapeToolKit::OnChangeBrush, FName(BrushName)), FCanExecuteAction(), FIsActionChecked::CreateSP(this, &FLandscapeToolKit::IsBrushActive, FName(BrushName)))); MAP_BRUSH("Circle_Smooth"); MAP_BRUSH("Circle_Linear"); MAP_BRUSH("Circle_Spherical"); MAP_BRUSH("Circle_Tip"); #undef MAP_BRUSH LandscapeEditorWidgets = SNew(SLandscapeEditor, SharedThis(this)); FModeToolkit::Init(InitToolkitHost); }
void FLandscapeToolKit::OnChangeMode(FName ModeName) { FEdModeLandscape* LandscapeEdMode = GetEditorMode(); if (LandscapeEdMode) { LandscapeEdMode->SetCurrentToolMode(ModeName); } }
void FLandscapeEditorDetails::OnChangeTool(FName ToolSetName) { FEdModeLandscape* LandscapeEdMode = GetEditorMode(); if (LandscapeEdMode != NULL) { LandscapeEdMode->SetCurrentTool(ToolSetName); } }
void FLandscapeEditorDetails::OnChangeBrush(FName BrushName) { FEdModeLandscape* LandscapeEdMode = GetEditorMode(); if (LandscapeEdMode != NULL) { LandscapeEdMode->SetCurrentBrush(BrushName); } }
void FLandscapeToolKit::OnChangeBrush(FName BrushName) { FEdModeLandscape* LandscapeEdMode = GetEditorMode(); if (LandscapeEdMode != nullptr) { LandscapeEdMode->SetCurrentBrush(BrushName); } }
void FLandscapeEditorDetailCustomization_MiscTools::OnbUseAutoRotateControlPointChanged(ECheckBoxState NewState) { FEdModeLandscape* LandscapeEdMode = GetEditorMode(); if (LandscapeEdMode) { LandscapeEdMode->SetbUseAutoRotateOnJoin(NewState == ECheckBoxState::Checked); } }
FReply FLandscapeEditorDetailCustomization_CopyPaste::OnGizmoImportButtonClicked() { FEdModeLandscape* LandscapeEdMode = GetEditorMode(); if (LandscapeEdMode != NULL) { ALandscapeGizmoActiveActor* Gizmo = LandscapeEdMode->CurrentGizmoActor.Get(); if (Gizmo) { TArray<uint8> Data; FFileHelper::LoadFileToArray(Data, *LandscapeEdMode->UISettings->GizmoHeightmapFilenameString); if (Data.Num() <= 0 || Data.Num() != (LandscapeEdMode->UISettings->GizmoImportSize.X * LandscapeEdMode->UISettings->GizmoImportSize.Y * 2)) { FMessageDialog::Open(EAppMsgType::Ok, NSLOCTEXT("UnrealEd", "LandscapeImport_BadHeightmapSize", "File size does not match")); return FReply::Handled(); } TArray<ULandscapeLayerInfoObject*> LayerInfos; TArray<TArray<uint8> > LayerDataArrays; TArray<uint8*> LayerDataPtrs; for (int32 LayerIndex = 0; LayerIndex < LandscapeEdMode->UISettings->GizmoImportLayers.Num(); LayerIndex++) { const FGizmoImportLayer& Layer = LandscapeEdMode->UISettings->GizmoImportLayers[LayerIndex]; FString LayerName = Layer.LayerName.Replace(TEXT(" "), TEXT("")); if (LayerName == TEXT("")) { FMessageDialog::Open(EAppMsgType::Ok, FText::Format( NSLOCTEXT("UnrealEd", "LandscapeImport_BadLayerName", "You must enter a name for the layer being imported from {0}."), FText::FromString(Layer.LayerFilename) )); return FReply::Handled(); } if (Layer.LayerFilename != TEXT("") && !Layer.bNoImport) { TArray<uint8>* LayerData = new(LayerDataArrays)(TArray<uint8>); FFileHelper::LoadFileToArray(*LayerData, *Layer.LayerFilename); if (LayerData->Num() != (LandscapeEdMode->UISettings->GizmoImportSize.X * LandscapeEdMode->UISettings->GizmoImportSize.Y)) { FMessageDialog::Open(EAppMsgType::Ok, FText::Format( NSLOCTEXT("UnrealEd", "LandscapeImport_BadLayerSize", "Layer {0} file size does not match the heightmap resolution."), FText::FromString(Layer.LayerFilename) )); return FReply::Handled(); } LayerInfos.Add(LandscapeEdMode->CurrentToolTarget.LandscapeInfo->GetLayerInfoByName(FName(*LayerName))); LayerDataPtrs.Add(&(*LayerData)[0]); } } Gizmo->Import(LandscapeEdMode->UISettings->GizmoImportSize.X, LandscapeEdMode->UISettings->GizmoImportSize.Y, (uint16*)Data.GetTypedData(), LayerInfos, LayerDataPtrs.Num() ? LayerDataPtrs.GetTypedData() : NULL); } } return FReply::Handled(); }
void SLandscapeEditor::NotifyBrushChanged() { FEdModeLandscape* LandscapeEdMode = GetEditorMode(); if (LandscapeEdMode) { // Refresh details panel DetailsPanel->SetObject(LandscapeEdMode->UISettings, true); } }
FText SLandscapeEditor::GetErrorText() const { const FEdModeLandscape* LandscapeEdMode = GetEditorMode(); ELandscapeEditingState EditState = LandscapeEdMode->GetEditingState(); switch (EditState) { case ELandscapeEditingState::SIEWorld: { if (LandscapeEdMode->NewLandscapePreviewMode != ENewLandscapePreviewMode::None) { return LOCTEXT("IsSimulatingError_create", "Can't create landscape while simulating!"); } else { return LOCTEXT("IsSimulatingError_edit", "Can't edit landscape while simulating!"); } break; } case ELandscapeEditingState::PIEWorld: { if (LandscapeEdMode->NewLandscapePreviewMode != ENewLandscapePreviewMode::None) { return LOCTEXT("IsPIEError_create", "Can't create landscape in PIE!"); } else { return LOCTEXT("IsPIEError_edit", "Can't edit landscape in PIE!"); } break; } case ELandscapeEditingState::BadFeatureLevel: { if (LandscapeEdMode->NewLandscapePreviewMode != ENewLandscapePreviewMode::None) { return LOCTEXT("IsFLError_create", "Can't create landscape with a feature level less than SM4!"); } else { return LOCTEXT("IsFLError_edit", "Can't edit landscape with a feature level less than SM4!"); } break; } case ELandscapeEditingState::NoLandscape: { return LOCTEXT("NoLandscapeError", "No Landscape!"); } case ELandscapeEditingState::Enabled: { return FText::GetEmpty(); } default: checkNoEntry(); } return FText::GetEmpty(); }
ECheckBoxState FLandscapeEditorDetailCustomization_MiscTools::GetbUseAutoRotateControlPoint() const { FEdModeLandscape* LandscapeEdMode = GetEditorMode(); if (LandscapeEdMode) { return LandscapeEdMode->GetbUseAutoRotateOnJoin() ? ECheckBoxState::Checked : ECheckBoxState::Unchecked; } return ECheckBoxState::Unchecked; }
FReply FLandscapeSplineDetails::OnMoveToCurrentLevelButtonClicked() { FEdModeLandscape* LandscapeEdMode = GetEditorMode(); if (LandscapeEdMode && LandscapeEdMode->CurrentToolTarget.LandscapeInfo.IsValid() && LandscapeEdMode->CurrentToolTarget.LandscapeInfo->GetCurrentLevelLandscapeProxy(true)) { LandscapeEdMode->SplineMoveToCurrentLevel(); } return FReply::Handled(); }
FReply FLandscapeSplineDetails::OnSelectConnectedSegmentsButtonClicked() { FEdModeLandscape* LandscapeEdMode = GetEditorMode(); if (LandscapeEdMode && LandscapeEdMode->CurrentToolTarget.LandscapeInfo.IsValid()) { LandscapeEdMode->SelectAllConnectedSplineSegments(); } return FReply::Handled(); }
bool SLandscapeEditor::GetLandscapeEditorIsEnabled() const { FEdModeLandscape* LandscapeEdMode = GetEditorMode(); if (LandscapeEdMode) { Error->SetError(GetErrorText()); return LandscapeEdMode->GetEditingState() == ELandscapeEditingState::Enabled; } return false; }
bool FLandscapeToolKit::IsModeActive(FName ModeName) const { FEdModeLandscape* LandscapeEdMode = GetEditorMode(); if (LandscapeEdMode && LandscapeEdMode->CurrentTool) { return LandscapeEdMode->CurrentToolMode->ToolModeName == ModeName; } return false; }
FText FLandscapeEditorDetails::GetTargetLandscapeName() { FEdModeLandscape* LandscapeEdMode = GetEditorMode(); if (LandscapeEdMode && LandscapeEdMode->CurrentToolTarget.LandscapeInfo.IsValid()) { return FText::FromString(LandscapeEdMode->CurrentToolTarget.LandscapeInfo->GetLandscapeProxy()->GetActorLabel()); } return FText(); }
EVisibility FLandscapeEditorDetails::GetTargetLandscapeSelectorVisibility() { FEdModeLandscape* LandscapeEdMode = GetEditorMode(); if (LandscapeEdMode && LandscapeEdMode->GetLandscapeList().Num() > 1) { return EVisibility::Visible; } return EVisibility::Collapsed; }
FReply FLandscapeEditorDetailCustomization_MiscTools::OnResetMirrorPointButtonClicked() { FEdModeLandscape* LandscapeEdMode = GetEditorMode(); if (LandscapeEdMode != NULL && IsToolActive(FName("Mirror"))) { LandscapeEdMode->CenterMirrorTool(); } return FReply::Handled(); }
FReply FLandscapeEditorDetailCustomization_MiscTools::OnResetRampButtonClicked() { FEdModeLandscape* LandscapeEdMode = GetEditorMode(); if (LandscapeEdMode != NULL && IsToolActive(FName("Ramp"))) { LandscapeEdMode->ResetRampTool(); } return FReply::Handled(); }
FReply FLandscapeEditorDetailCustomization_MiscTools::OnApplySelectedSplinesButtonClicked() { FEdModeLandscape* LandscapeEdMode = GetEditorMode(); if (LandscapeEdMode && LandscapeEdMode->CurrentToolTarget.LandscapeInfo.IsValid()) { LandscapeEdMode->CurrentToolTarget.LandscapeInfo->ApplySplines(true); } return FReply::Handled(); }
bool FLandscapeEditorDetailCustomization_MiscTools::GetApplyRampButtonIsEnabled() { FEdModeLandscape* LandscapeEdMode = GetEditorMode(); if (LandscapeEdMode != NULL && IsToolActive(FName("Ramp"))) { return LandscapeEdMode->CanApplyRampTool(); } return false; }
bool FLandscapeEditorDetails::IsBrushSetEnabled(FName BrushSetName) const { FEdModeLandscape* LandscapeEdMode = GetEditorMode(); if (LandscapeEdMode && LandscapeEdMode->CurrentToolSet) { return LandscapeEdMode->CurrentToolSet->ValidBrushes.Contains(BrushSetName); } return false; }
bool Control::OnEventMouseEditor(Event event,WPARAM wparam,LPARAM lparam) { if(!GetEditorMode()) return false; // // TODO Implement control resizing/repositioning code // return false; }
bool FLandscapeToolKit::IsToolActive(FName ToolName) const { FEdModeLandscape* LandscapeEdMode = GetEditorMode(); if (LandscapeEdMode != nullptr && LandscapeEdMode->CurrentTool != nullptr) { const FName CurrentToolName = LandscapeEdMode->CurrentTool->GetToolName(); return CurrentToolName == ToolName; } return false; }
bool FLandscapeToolKit::IsBrushSetActive(FName BrushSetName) const { FEdModeLandscape* LandscapeEdMode = GetEditorMode(); if (LandscapeEdMode && LandscapeEdMode->CurrentBrushSetIndex >= 0) { const FName CurrentBrushSetName = LandscapeEdMode->LandscapeBrushSets[LandscapeEdMode->CurrentBrushSetIndex].BrushSetName; return CurrentBrushSetName == BrushSetName; } return false; }
FText FLandscapeEditorDetails::GetCurrentToolName() const { FEdModeLandscape* LandscapeEdMode = GetEditorMode(); if (LandscapeEdMode != NULL && LandscapeEdMode->CurrentTool != NULL) { const TCHAR* CurrentToolName = LandscapeEdMode->CurrentTool->GetToolName(); return GetLocalizedName(FString("ToolSet_") + CurrentToolName); } return LOCTEXT("Unknown", "Unknown"); }
bool FLandscapeEditorDetails::IsBrushActive(FName BrushName) const { FEdModeLandscape* LandscapeEdMode = GetEditorMode(); if (LandscapeEdMode && LandscapeEdMode->CurrentBrush) { const FName CurrentBrushName = LandscapeEdMode->CurrentBrush->GetBrushName(); return CurrentBrushName == BrushName; } return false; }
FSlateIcon FLandscapeEditorDetails::GetCurrentToolIcon() const { FEdModeLandscape* LandscapeEdMode = GetEditorMode(); if (LandscapeEdMode != NULL && LandscapeEdMode->CurrentTool != NULL) { const TCHAR* CurrentToolName = LandscapeEdMode->CurrentTool->GetToolName(); return FLandscapeEditorCommands::Get().NameToCommandMap.FindChecked(*(FString("Tool_") + CurrentToolName))->GetIcon(); } return FSlateIcon(FEditorStyle::GetStyleSetName(), "Default"); }
FText FLandscapeEditorDetails::GetCurrentBrushFalloffName() const { FEdModeLandscape* LandscapeEdMode = GetEditorMode(); if (LandscapeEdMode != NULL && LandscapeEdMode->CurrentBrush != NULL) { const FName CurrentBrushName = LandscapeEdMode->CurrentBrush->GetBrushName(); return GetLocalizedName(CurrentBrushName); } return LOCTEXT("Unknown", "Unknown"); }
FText FLandscapeEditorDetails::GetCurrentBrushName() const { FEdModeLandscape* LandscapeEdMode = GetEditorMode(); if (LandscapeEdMode != NULL && LandscapeEdMode->CurrentBrush != NULL) { const FName CurrentBrushSetName = LandscapeEdMode->LandscapeBrushSets[LandscapeEdMode->CurrentBrushSetIndex].BrushSetName; return GetLocalizedName(CurrentBrushSetName.ToString()); } return LOCTEXT("Unknown", "Unknown"); }
FSlateIcon FLandscapeEditorDetails::GetCurrentToolIcon() const { FEdModeLandscape* LandscapeEdMode = GetEditorMode(); if (LandscapeEdMode != NULL && LandscapeEdMode->CurrentToolSet != NULL) { const FName CurrentToolSetName = LandscapeEdMode->CurrentToolSet->GetToolSetName(); return FLandscapeEditorCommands::Get().NameToCommandMap.FindChecked(CurrentToolSetName)->GetIcon(); } return FSlateIcon(FEditorStyle::GetStyleSetName(), "Default"); }