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