157 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			157 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #pragma once
 | |
| 
 | |
| #include "CoreMinimal.h"
 | |
| #include "Modules/ModuleManager.h"
 | |
| #include "Containers/Ticker.h"
 | |
| 
 | |
| #ifdef __clang__
 | |
| #pragma clang diagnostic ignored "-Wignored-attributes"
 | |
| #endif
 | |
| 
 | |
| class UCSAssembly;
 | |
| struct FPluginTemplateDescription;
 | |
| enum ECSLoggerVerbosity : uint8;
 | |
| class UCSInterface;
 | |
| class UCSEnum;
 | |
| class UCSClass;
 | |
| class UCSScriptStruct;
 | |
| class UCSManager;
 | |
| class IAssetTools;
 | |
| class FCSScriptBuilder;
 | |
| 
 | |
| enum HotReloadStatus
 | |
| {
 | |
|     // Not Hot Reloading
 | |
|     Inactive,
 | |
|     // When the DirectoryWatcher picks up on new code changes that haven't been Hot Reloaded yet
 | |
|     PendingReload,
 | |
|     // Actively Hot Reloading
 | |
|     Active,
 | |
|     // Failed to unload an assembly during Hot Reload
 | |
|     FailedToUnload
 | |
| };
 | |
| 
 | |
| struct FCSManagedUnrealSharpEditorCallbacks
 | |
| {
 | |
|     FCSManagedUnrealSharpEditorCallbacks() : Build(nullptr), ForceManagedGC(nullptr), OpenSolution(nullptr), AddProjectToCollection(nullptr)
 | |
|     {
 | |
|     }
 | |
| 
 | |
|     using FBuildProject = bool(__stdcall*)(const TCHAR*, const TCHAR*, const TCHAR*, ECSLoggerVerbosity, void*, bool);
 | |
|     using FForceManagedGC = void(__stdcall*)();
 | |
|     using FOpenSolution = bool(__stdcall*)(const TCHAR*, void*);
 | |
|     using FAddProjectToCollection = void(__stdcall*)(const TCHAR*);
 | |
| 
 | |
|     FBuildProject Build;
 | |
|     FForceManagedGC ForceManagedGC;
 | |
|     FOpenSolution OpenSolution;
 | |
|     FAddProjectToCollection AddProjectToCollection;
 | |
| };
 | |
| 
 | |
| 
 | |
| DECLARE_LOG_CATEGORY_EXTERN(LogUnrealSharpEditor, Log, All);
 | |
| 
 | |
| class FUnrealSharpEditorModule : public IModuleInterface
 | |
| {
 | |
| public:
 | |
|     static FUnrealSharpEditorModule& Get();
 | |
| 
 | |
|     // IModuleInterface interface begin
 | |
|     virtual void StartupModule() override;
 | |
|     virtual void ShutdownModule() override;
 | |
|     // End
 | |
| 
 | |
|     void OnCSharpCodeModified(const TArray<struct FFileChangeData>& ChangedFiles);
 | |
|     void StartHotReload(bool bRebuild = true, bool bPromptPlayerWithNewProject = true);
 | |
| 
 | |
|     void InitializeUnrealSharpEditorCallbacks(FCSManagedUnrealSharpEditorCallbacks Callbacks);
 | |
| 
 | |
|     bool IsHotReloading() const { return HotReloadStatus == Active; }
 | |
|     bool HasPendingHotReloadChanges() const { return HotReloadStatus == PendingReload; }
 | |
|     bool HasHotReloadFailed() const { return bHotReloadFailed; }
 | |
| 
 | |
|     FUICommandList& GetUnrealSharpCommands() const { return *UnrealSharpCommands; }
 | |
| 
 | |
|     void OpenSolution();
 | |
|     void AddDirectoryToWatch(const FString& Directory);
 | |
| 
 | |
|     void AddNewProject(const FString& ModuleName, const FString& ProjectParentFolder, const FString& ProjectRoot, const TMap<FString, FString>& Arguments = {});
 | |
| 
 | |
|     FCSManagedUnrealSharpEditorCallbacks& GetManagedUnrealSharpEditorCallbacks()
 | |
|     {
 | |
|         return ManagedUnrealSharpEditorCallbacks;
 | |
|     }
 | |
|     
 | |
|     static bool FillTemplateFile(const FString& TemplateName, TMap<FString, FString>& Replacements, const FString& Path);
 | |
| 
 | |
|     static void RepairComponents();
 | |
| 
 | |
| private:
 | |
|     static FString SelectArchiveDirectory();
 | |
| 
 | |
|     static void RunGame(FString ExecutablePath);
 | |
| 
 | |
|     static void CopyProperties(UActorComponent* Source, UActorComponent* Target);
 | |
| 
 | |
|     static void OnCreateNewProject();
 | |
|     static void OnCompileManagedCode();
 | |
|     static void OnReloadManagedCode();
 | |
|     void OnRegenerateSolution();
 | |
|     void OnOpenSolution();
 | |
|     static void OnPackageProject();
 | |
|     static void OnMergeManagedSlnAndNativeSln();
 | |
| 
 | |
|     static void OnOpenSettings();
 | |
|     static void OnOpenDocumentation();
 | |
|     static void OnReportBug();
 | |
|     static void OnRefreshRuntimeGlue();
 | |
| 
 | |
|     static void OnRepairComponents();
 | |
|     static void OnExploreArchiveDirectory(FString ArchiveDirectory);
 | |
|     static void PackageProject();
 | |
| 
 | |
|     TSharedRef<SWidget> GenerateUnrealSharpMenu();
 | |
| 
 | |
|     static void OpenNewProjectDialog();
 | |
|     static void SuggestProjectSetup();
 | |
| 
 | |
|     bool Tick(float DeltaTime);
 | |
| 
 | |
|     void RegisterCommands();
 | |
|     void RegisterMenu();
 | |
|     void RegisterPluginTemplates();
 | |
|     void UnregisterPluginTemplates();
 | |
| 
 | |
|     void OnPIEShutdown(bool IsSimulating);
 | |
| 
 | |
|     void OnStructRebuilt(UCSScriptStruct* NewStruct);
 | |
|     void OnClassRebuilt(UCSClass* NewClass);
 | |
|     void OnEnumRebuilt(UCSEnum* NewEnum);
 | |
| 
 | |
|     bool IsPinAffectedByReload(const FEdGraphPinType& PinType) const;
 | |
|     bool IsNodeAffectedByReload(UEdGraphNode* Node) const;
 | |
|     
 | |
|     void RefreshAffectedBlueprints();
 | |
| 
 | |
|     FSlateIcon GetMenuIcon() const;
 | |
| 
 | |
|     FCSManagedUnrealSharpEditorCallbacks ManagedUnrealSharpEditorCallbacks;
 | |
| 
 | |
|     HotReloadStatus HotReloadStatus = Inactive;
 | |
|     bool bHotReloadFailed = false;
 | |
|     bool bHasQueuedHotReload = false;
 | |
| 
 | |
|     UCSAssembly* EditorAssembly;
 | |
|     FTickerDelegate TickDelegate;
 | |
|     FTSTicker::FDelegateHandle TickDelegateHandle;
 | |
|     TSharedPtr<FUICommandList> UnrealSharpCommands;
 | |
|     TArray<TSharedRef<FPluginTemplateDescription>> PluginTemplates;
 | |
| 
 | |
|     TSet<UCSScriptStruct*> RebuiltStructs;
 | |
|     TSet<UCSClass*> RebuiltClasses;
 | |
|     TSet<UCSEnum*> RebuiltEnums;
 | |
| 
 | |
|     UCSManager* Manager = nullptr;
 | |
|     TArray<FString> WatchingDirectories;
 | |
| };
 |