maboren 5 сар өмнө
parent
commit
bced68f03d

+ 100 - 0
Ability/Plugins/EzAbility/Source/EzAbilityEditor/Private/AbilityEditorViewportClient.cpp

@@ -0,0 +1,100 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "AbilityEditorViewportClient.h"
+#include "PreviewScene.h"
+#include "AdvancedPreviewScene.h"
+#include "EditorViewportClient.h"
+#include "SEditorViewport.h"
+#include "Templates/SharedPointer.h"
+#include "SAbilityEditorViewport.h"
+#include "Editor/UnrealEd/Public/PackageTools.h"
+#include "Editor/UnrealEd/Public/FileHelpers.h"
+
+// FDialogueEditorViewportClient::FDialogueEditorViewportClient(const TSharedRef<SDialogueEditorViewport>& InThumbnailViewport,const TSharedRef<FAdvancedPreviewScene>& InPreviewScene, UMBRData* TestMBR)
+// 	: FEditorViewportClient(nullptr, &InPreviewScene.Get(), StaticCastSharedRef<SEditorViewport>(InThumbnailViewport))
+// 	, ViewportPtr(InThumbnailViewport)
+// 	, Dialogue(TestMBR)
+// {
+// 
+// 	
+// }
+
+FAbilityEditorViewportClient::FAbilityEditorViewportClient(const TSharedRef<SAbilityEditorViewport>& InThumbnailViewport, FAdvancedPreviewScene& InPreviewScene) //, UMBRData* TestMBR
+	: FEditorViewportClient(nullptr, &InPreviewScene, StaticCastSharedRef<SEditorViewport>(InThumbnailViewport))
+	, ViewportPtr(InThumbnailViewport)
+//	, Dialogue(TestMBR)
+{
+	
+// 	auto FindWorldInPackageOrFollowRedirector = [](UPackage*& InOutPackage)
+// 	{
+// 		UWorld* RetVal = nullptr;
+// 		TArray<UObject*> PotentialWorlds;
+// 		GetObjectsWithOuter(InOutPackage, PotentialWorlds, false);
+// 		for (auto ObjIt = PotentialWorlds.CreateConstIterator(); ObjIt; ++ObjIt)
+// 		{
+// 			RetVal = Cast<UWorld>(*ObjIt);
+// 			if (RetVal)
+// 			{
+// 				break;
+// 			}
+// 			else if (UObjectRedirector* Redirector = Cast<UObjectRedirector>(*ObjIt))
+// 			{
+// 				RetVal = Cast<UWorld>(Redirector->DestinationObject);
+// 				if (RetVal)
+// 				{
+// 					// Patch up the WorldType if found in the PreLoad map
+// 					EWorldType::Type* PreLoadWorldType = UWorld::WorldTypePreLoadMap.Find(Redirector->GetOuter()->GetFName());
+// 					if (PreLoadWorldType)
+// 					{
+// 						RetVal->WorldType = *PreLoadWorldType;
+// 					}
+// 
+// 					// If we followed a redirector also update the package pointer to the actual returned world package
+// 					InOutPackage = RetVal->GetOutermost();
+// 					break;
+// 				}
+// 			}
+// 		}
+// 		return RetVal;
+// 	};
+// 
+// 	///Script/Engine.World'/Game/Untitled.Untitled'
+// 	//FString	LongTempFname = TEXT("/Game/ThirdPerson/Maps/SuccessMap");
+// 
+// 
+// // 	TArray<UPackage*> WorldPackages;
+// // 	for (TObjectIterator<UWorld> It; It; ++It)
+// // 	{
+// // 		// Don't unload transient or newly created worlds, nor the world we're attempting to keep-alive
+// // 		UPackage* Package = It->GetPackage();
+// // 		if (Package != GetTransientPackage() && !Package->HasAnyPackageFlags(PKG_NewlyCreated)) // && *It != NewWorld
+// // 		{
+// // 			WorldPackages.AddUnique(Package);
+// // 		}
+// // 	}
+// 
+// 	TArray<UPackage*> WorldPackages;
+// 
+// 	FString	LongTempFname = TEXT("/Game/Untitled");
+// 	FLinkerInstancingContext WorldPackageInstancingContext;
+// 	WorldPackageInstancingContext.AddTag(UWorld::KeepInitializedDuringLoadTag);
+// 	UPackage* TestPackage = LoadPackage(NULL, *LongTempFname, LOAD_None, nullptr, &WorldPackageInstancingContext);
+// 	UWorld* World = FindWorldInPackageOrFollowRedirector(TestPackage);
+// 
+// 	//WorldPackages.Add(TestPackage);
+// 
+// 	//UPackageTools::UnloadPackages(WorldPackages);
+// 	//FEditorFileUtils::GetOnLoadMapStartDelegate().AddSP(this, &FDialogueEditorViewportClient::CleanWorld);//.AddSP(this, &FDialogueEditorViewportClient::CleanWorld); //在LoadMap开始时,先清理掉当前Map
+// 
+// 	FWorldContext& InitialWorldContext = GEngine->CreateNewWorldContext(EWorldType::Editor);
+// 	//InitialWorldContext.SetCurrentWorld(UWorld::CreateWorld(EWorldType::Editor, true ));
+// 	InitialWorldContext.SetCurrentWorld(World);
+// 	DialogueWorld = InitialWorldContext.World();
+}
+
+FAbilityEditorViewportClient::~FAbilityEditorViewportClient()
+{
+	UE_LOG(LogTemp, Warning, TEXT("Dialogue Editor"));
+}
+

+ 12 - 12
Ability/Plugins/EzAbility/Source/EzAbilityEditor/Private/EzAbilityEditorApplicationMode.cpp

@@ -34,18 +34,18 @@ void FEzAbilityEditorApplicationMode::RegisterTabFactories(TSharedPtr<class FTab
 	EzAbilityEditorPtr->PushTabFactories(EzAbilityEditorTabFactories);
 }
 
-void FEzAbilityEditorApplicationMode::AddTabFactory(FCreateWorkflowTabFactory FactoryCreator)
-{
-	if (FactoryCreator.IsBound())
-	{
-		EzAbilityEditorTabFactories.RegisterFactory(FactoryCreator.Execute(EzAbilityEditor.Pin()));
-	}
-}
-
-void FEzAbilityEditorApplicationMode::RemoveTabFactory(FName TabFactoryID)
-{
-	EzAbilityEditorTabFactories.UnregisterFactory(TabFactoryID);
-}
+// void FEzAbilityEditorApplicationMode::AddTabFactory(FCreateWorkflowTabFactory FactoryCreator)
+// {
+// 	if (FactoryCreator.IsBound())
+// 	{
+// 		EzAbilityEditorTabFactories.RegisterFactory(FactoryCreator.Execute(EzAbilityEditor.Pin()));
+// 	}
+// }
+// 
+// void FEzAbilityEditorApplicationMode::RemoveTabFactory(FName TabFactoryID)
+// {
+// 	EzAbilityEditorTabFactories.UnregisterFactory(TabFactoryID);
+// }
 
 TSharedRef<FWorkflowTabFactory> FEzAbilityEditorApplicationMode::CreateAdvancedPreviewSceneTabFactory(const TSharedRef<class FWorkflowCentricApplication>& InHostingApp, const TSharedRef<FAdvancedPreviewScene>& InPreviewScene) const
 {

+ 11 - 17
Ability/Plugins/EzAbility/Source/EzAbilityEditor/Private/EzAbilityTabSpawners.cpp

@@ -7,6 +7,8 @@
 #include "Styling/AppStyle.h"
 #include "Styling/CoreStyle.h"
 #include "SAdvancedPreviewDetailsTab.h"
+#include "SEditorViewport.h"
+#include "SAbilityEditorViewport.h"
 
 #define LOCTEXT_NAMESPACE "AbilityModes"
 
@@ -47,25 +49,17 @@ FEzAdvancedPreviewSceneTabSummoner::FEzAdvancedPreviewSceneTabSummoner(TSharedPt
 
 TSharedRef<SWidget> FEzAdvancedPreviewSceneTabSummoner::CreateTabBody(const FWorkflowTabSpawnInfo& Info) const
 {
-// 	const TSharedPtr<FAdvancedPreviewScene> &InPreviewScene = PreviewScene.Pin();
-// 	return SNew(SAdvancedPreviewDetailsTab, InPreviewScene);
+	//return SNew(SAdvancedPreviewDetailsTab, StaticCastSharedRef<FAdvancedPreviewScene>(PreviewScene.Pin().ToSharedRef()));
+	//return SNew(SEditorViewport);
+	TSharedPtr<SAbilityEditorViewport> AbilityEditorViewport;
+	return SAssignNew(AbilityEditorViewport, SAbilityEditorViewport);
 
-	return SNew(SButton)
-		.VAlign(VAlign_Center)
-		.HAlign(HAlign_Center)
-		.Text(LOCTEXT("SplitSprites", "Split Sprites"))
-		.ToolTipText(LOCTEXT("SplitSprites_Tooltip", "Splits all sprite instances into separate sprite actors or components"));
+// 	return SNew(SButton)
+// 		.VAlign(VAlign_Center)
+// 		.HAlign(HAlign_Center)
+// 		.Text(LOCTEXT("SplitSprites", "Split Sprites"))
+// 		.ToolTipText(LOCTEXT("SplitSprites_Tooltip", "Splits all sprite instances into separate sprite actors or components"));
 
-// 	TSharedRef<FAnimationEditorPreviewScene> PreviewSceneRef = StaticCastSharedRef<FAnimationEditorPreviewScene>(PreviewScene.Pin().ToSharedRef());
-// 
-// 	TArray<FAdvancedPreviewSceneModule::FDetailCustomizationInfo> DetailsCustomizations;
-// 	TArray<FAdvancedPreviewSceneModule::FPropertyTypeCustomizationInfo> PropertyTypeCustomizations;
-// 
-// 	DetailsCustomizations.Add({ UPersonaPreviewSceneDescription::StaticClass(), FOnGetDetailCustomizationInstance::CreateSP(const_cast<FAdvancedPreviewSceneTabSummoner*>(this), &FAdvancedPreviewSceneTabSummoner::CustomizePreviewSceneDescription) });
-// 	PropertyTypeCustomizations.Add({ FPreviewMeshCollectionEntry::StaticStruct()->GetFName(), FOnGetPropertyTypeCustomizationInstance::CreateSP(const_cast<FAdvancedPreviewSceneTabSummoner*>(this), &FAdvancedPreviewSceneTabSummoner::CustomizePreviewMeshCollectionEntry) });
-// 
-// 	FAdvancedPreviewSceneModule& AdvancedPreviewSceneModule = FModuleManager::LoadModuleChecked<FAdvancedPreviewSceneModule>("AdvancedPreviewScene");
-// 	return AdvancedPreviewSceneModule.CreateAdvancedPreviewSceneSettingsWidget(PreviewSceneRef, PreviewSceneRef->GetPreviewSceneDescription(), DetailsCustomizations, PropertyTypeCustomizations);
 }
 
 FText FEzAdvancedPreviewSceneTabSummoner::GetTabToolTipText(const FWorkflowTabSpawnInfo& Info) const

+ 62 - 0
Ability/Plugins/EzAbility/Source/EzAbilityEditor/Private/SAbilityEditorViewport.cpp

@@ -0,0 +1,62 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "SAbilityEditorViewport.h"
+#include "SlateOptMacros.h"
+#include "AbilityEditorViewportClient.h"
+
+BEGIN_SLATE_FUNCTION_BUILD_OPTIMIZATION
+
+SAbilityEditorViewport::SAbilityEditorViewport()
+	//:PreviewScene(MakeShareable(new FAdvancedPreviewScene(FPreviewScene::ConstructionValues()))) {};
+	:PreviewScene(FAdvancedPreviewScene::ConstructionValues())
+{
+		
+};
+
+
+
+SAbilityEditorViewport::~SAbilityEditorViewport()
+{
+
+}
+
+void SAbilityEditorViewport::Construct(const FArguments& InArgs)
+{
+	//TestMBR = InArgs._TestMBR.Get();
+
+	SEditorViewport::Construct(SEditorViewport::FArguments());
+}
+
+
+TSharedRef<FEditorViewportClient> SAbilityEditorViewport::MakeEditorViewportClient()
+{
+	//DialogueViewport = new FDialogueEditorViewportClient(SharedThis(this), PreviewScene.ToSharedRef(), TestMBR);
+	AbilityViewport = new FAbilityEditorViewportClient(SharedThis(this), PreviewScene);
+	TSharedPtr<FEditorViewportClient> EditorViewportClient = MakeShareable(AbilityViewport);
+	return EditorViewportClient.ToSharedRef();
+}
+
+TSharedPtr<SWidget> SAbilityEditorViewport::MakeViewportToolbar()
+{
+	return nullptr;
+}
+
+TSharedRef<class SEditorViewport> SAbilityEditorViewport::GetViewportWidget()
+{
+	return SharedThis(this);
+}
+
+TSharedPtr<FExtender> SAbilityEditorViewport::GetExtenders() const
+{
+	TSharedPtr<FExtender> Result((new FExtender));
+	return Result;
+}
+
+void SAbilityEditorViewport::OnFloatingButtonClicked()
+{
+	
+}
+
+END_SLATE_FUNCTION_BUILD_OPTIMIZATION
+

+ 29 - 0
Ability/Plugins/EzAbility/Source/EzAbilityEditor/Public/AbilityEditorViewportClient.h

@@ -0,0 +1,29 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+
+class SAbilityEditorViewport;
+class FAdvancedPreviewScene;
+/**
+ * 
+ */
+
+class  FAbilityEditorViewportClient : public FEditorViewportClient
+{
+public:
+	//FDialogueEditorViewportClient(const TSharedRef<SDialogueEditorViewport>& InThumbnailViewport,const TSharedRef<FAdvancedPreviewScene>& InPreviewScene, UMBRData* TestMBR);
+	FAbilityEditorViewportClient(const TSharedRef<SAbilityEditorViewport>& InThumbnailViewport, FAdvancedPreviewScene& InPreviewScene); //, UMBRData* TestMBR
+	~FAbilityEditorViewportClient();
+
+public:
+
+	TWeakPtr<SAbilityEditorViewport>									ViewportPtr;
+
+	FAdvancedPreviewScene*												AdvancedPreviewScene;
+
+// 	UMBRData*															Dialogue;
+// 
+// 	UWorld*																DialogueWorld;
+};

+ 2 - 2
Ability/Plugins/EzAbility/Source/EzAbilityEditor/Public/EzAbilityEditorApplicationMode.h

@@ -21,8 +21,8 @@ public:
 
 protected:
 
-	virtual void AddTabFactory(FCreateWorkflowTabFactory FactoryCreator) override;
-	virtual void RemoveTabFactory(FName TabFactoryID) override;
+// 	virtual void AddTabFactory(FCreateWorkflowTabFactory FactoryCreator) override;
+// 	virtual void RemoveTabFactory(FName TabFactoryID) override;
 
 
 

+ 3 - 4
Ability/Plugins/EzAbility/Source/EzAbilityEditor/Public/EzAbilityTabSpawners.h

@@ -20,6 +20,7 @@
 #include "SSingleObjectDetailsPanel.h"
 #include "PersonaTabs.h"
 #include "AdvancedPreviewSceneModule.h"
+#include "SAbilityEditorViewport.h"
 
 #define LOCTEXT_NAMESPACE "AbilityMode"
 
@@ -35,16 +36,13 @@ struct FAbilityTabs
 };
 
 
-/////////////////////////////////////////////////////
-// FAdvancedPreviewSceneTabSummoner
-
 struct FEzAdvancedPreviewSceneTabSummoner : public FWorkflowTabFactory
 {
 public:
  	FEzAdvancedPreviewSceneTabSummoner(TSharedPtr<class FAssetEditorToolkit> InHostingApp, const TSharedRef<FAdvancedPreviewScene>& InPreviewScene); 
 	virtual TSharedRef<SWidget> CreateTabBody(const FWorkflowTabSpawnInfo& Info) const override;
 	virtual FText GetTabToolTipText(const FWorkflowTabSpawnInfo& Info) const override;
-
+	//TSharedPtr<SAbilityEditorViewport>		AbilityEditorViewport;
 private:
 	/** Customize the details of the scene setup object */
 	TSharedRef<class IDetailCustomization> CustomizePreviewSceneDescription();
@@ -54,6 +52,7 @@ private:
 
 private:
 	TWeakPtr<class FAdvancedPreviewScene> PreviewScene;
+
 };
 
 

+ 49 - 0
Ability/Plugins/EzAbility/Source/EzAbilityEditor/Public/SAbilityEditorViewport.h

@@ -0,0 +1,49 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "Widgets/SCompoundWidget.h"
+#include "SEditorViewport.h"
+#include "SCommonEditorViewportToolbarBase.h"
+#include "PreviewScene.h"
+#include "AdvancedPreviewScene.h"
+#include "AbilityEditorViewportClient.h"
+
+/**
+ * 
+ */
+class  SAbilityEditorViewport : public SEditorViewport, public ICommonEditorViewportToolbarInfoProvider
+{
+public:
+	SLATE_BEGIN_ARGS(SAbilityEditorViewport)
+	{}
+	//SLATE_ATTRIBUTE(TObjectPtr<UMBRData>, TestMBR)
+	SLATE_END_ARGS()
+
+	/** Constructs this widget with InArgs */
+	void Construct(const FArguments& InArgs);
+
+	SAbilityEditorViewport();
+   ~SAbilityEditorViewport();
+
+protected:
+	virtual TSharedRef<FEditorViewportClient>	MakeEditorViewportClient()	override;
+	virtual TSharedPtr<SWidget>					MakeViewportToolbar()		override;
+
+public:
+	virtual TSharedRef<SEditorViewport>			GetViewportWidget()			override;
+	virtual TSharedPtr<FExtender>				GetExtenders()				const override;
+	virtual void								OnFloatingButtonClicked()	override;
+
+private:
+	//TSharedPtr<FAdvancedPreviewScene>							PreviewScene;
+	//TWeakPtr<FAdvancedPreviewScene>							PreviewScene;
+
+	FAdvancedPreviewScene									PreviewScene;
+public:
+
+	FAbilityEditorViewportClient*							AbilityViewport;
+
+
+};