class FEdModeCustom : public FEdMode { public: FEdModeCustom(); ~FEdModeCustom(); virtual void Tick(FEditorViewportClient* ViewportClient,float DeltaTime) override; // FEdMode interface virtual bool UsesToolkits() const override; void Enter() override; void Exit() override; virtual bool InputKey( FEditorViewportClient* InViewportClient, FViewport* InViewport, FKey InKey, EInputEvent InEvent ) override; virtual bool HandleClick(FEditorViewportClient* InViewportClient, HHitProxy *HitProxy, const FViewportClick &Click ) override; virtual void Render(const FSceneView* View, FViewport* Viewport, FPrimitiveDrawInterface* PDI) override; //FEdMode: Render elements for the Draw tool virtual bool IsSelectionAllowed(AActor* InActor, bool bInSelection) const override; //Check to see if an actor can be selected in this mode - no side effects virtual void ActorSelectionChangeNotify() override; //Called when the currently selected actor has changed virtual bool ShouldDrawWidget() const override; virtual bool InputDelta(FEditorViewportClient* InViewportClient, FViewport* InViewport, FVector& InDrag, FRotator& InRot, FVector& InScale) override; // End of FEdMode interface //Render void DrawPrevewGird(FPrimitiveDrawInterface* PDI); void DrawBlankCells(FPrimitiveDrawInterface* PDI); class ATestAct* EditorModel; void ForceRealTimeViewports(const bool bEnable, const bool bStoreCurrentState); TSharedPtr<class FCustomToolBase> GetActiveTool() const { return ActiveTool; } void SetActiveTool(TSharedPtr<FCustomToolBase> ActiveTool); void ApplyBrush(FEditorViewportClient* ViewportClient); static FEditorModeID EM_EdModeCustom; private: UMaterial* OverlayMaterial; void UpdateGridCursorPosition(const FSceneView* View, FViewport* Viewport); ATestAct* FindTestActorOnScen(); TSharedPtr<class FCustomToolBase> ActiveTool; FIntVector GridCursorPosition; bool bToolActive; class SCustomEdit* EditPanel; };
void FLevelDrawEditorModule::StartupModule() { FCustomCommands::Register(); FEditorModeRegistry::Get().RegisterMode<FEdModeCustom> ( FEdModeCustom::EM_EdModeCustom, FText::FromString("Level Draw"), FSlateIcon(FEditorStyle::GetStyleSetName(), "LevelEditor.ViewOptions", "LevelEditor.ViewOptions.Small"), true, 400 ); //Registrate detail pannel costamization for TestActor FTestActDetailCustomization::RegestrateCostumization(); }
UCLASS() class LEVELDRAW_API ATestAct : public AActor { GENERATED_BODY() public: ATestAct(); UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Gird) FVector GridCellSize; UPROPERTY(Transient) UModeSettings* ModeSettings; UPROPERTY() FLevelMap LevelMap; private_subobject: #if WITH_EDITORONLY_DATA UPROPERTY() UBillboardComponent* SpriteComponent; #endif //WITH_EDITORONLY_DATA };
YourObjectInstance->SetFlags(RF_RootSet);
Source: https://habr.com/ru/post/280318/
All Articles