#pragma once #include "CoreMinimal.h" #include "WingServer.h" #include "WingHandler.h" #include "WingFetcher.h" #include "WingUtils.h" #include "Engine/Blueprint.h" #include "Kismet2/KismetEditorUtilities.h" #include "Blueprint_Compile.generated.h" // --------------------------------------------------------------------------- // --------------------------------------------------------------------------- // --------------------------------------------------------------------------- UCLASS() class UWing_Blueprint_Compile : public UObject, public IWingHandler { GENERATED_BODY() public: UPROPERTY(meta=(Optional, Description="Path of the blueprint.")) FString Blueprint; virtual FString GetDescription() const override { return TEXT("Compile a blueprint. "); } virtual void Handle() override { WingFetcher F; UBlueprint *BP = F.Walk(Blueprint).Cast(); EBlueprintCompileOptions CompileOpts = EBlueprintCompileOptions::SkipSave | EBlueprintCompileOptions::SkipGarbageCollection | EBlueprintCompileOptions::SkipFiBSearchMetaUpdate; FKismetEditorUtilities::CompileBlueprint(BP, CompileOpts, nullptr); // Collect compiler messages from nodes for (UEdGraphNode* Node : WingUtils::AllNodes(BP)) { if (!Node->bHasCompilerMessage) continue; UWingServer::Printf(TEXT("%s %s: %s\n"), *WingUtils::FormatName(Node->GetGraph()), *WingUtils::FormatName(Node), *Node->ErrorMsg); } UWingServer::Printf(TEXT("Compilation Done.\n")); } };