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;
							 | 
						|||
| 
								 | 
							
								};
							 |