Files
UnrealEngine/Engine/Plugins/ScriptPlugin/Source/ScriptEditorPlugin/Private/ScriptBlueprintCompiler.h
2025-05-18 13:04:45 +08:00

63 lines
1.9 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "KismetCompiler.h"
#include "ScriptBlueprint.h"
#include "Templates/Casts.h"
#include "Templates/UniquePtr.h"
/**
* Script Blueprint Compiler
*/
class FScriptBlueprintCompiler : public FKismetCompilerContext
{
protected:
typedef FKismetCompilerContext Super;
public:
FScriptBlueprintCompiler(UScriptBlueprint* SourceSketch, FCompilerResultsLog& InMessageLog, const FKismetCompilerOptions& InCompilerOptions);
virtual ~FScriptBlueprintCompiler();
protected:
UScriptBlueprint* ScriptBlueprint() const { return Cast<UScriptBlueprint>(Blueprint); }
// FKismetCompilerContext
virtual void PreCompile() override;
virtual void SpawnNewClass(const FString& NewClassName) override;
virtual void OnNewClassSet(UBlueprintGeneratedClass* ClassToUse) override;
virtual void CleanAndSanitizeClass(UBlueprintGeneratedClass* ClassToClean, UObject*& InOldCDO) override;
virtual void EnsureProperGeneratedClass(UClass*& TargetClass) override;
virtual void CreateClassVariablesFromBlueprint() override;
virtual void CreateFunctionList() override;
virtual void FinishCompilingClass(UClass* Class) override;
virtual bool ValidateGeneratedClass(UBlueprintGeneratedClass* Class) override;
// End FKismetCompilerContext
protected:
/**
* Creates a script context property for this class (if needed)
*/
void CreateScriptContextProperty();
/**
* Creates a Blueprint Graph function definition for script defined function
*
* @param Field Function exported by script
*/
void CreateScriptDefinedFunction(FScriptField& Field);
/** New script class */
UScriptBlueprintGeneratedClass* NewScriptBlueprintClass;
/** Script context */
TUniquePtr<FScriptContextBase> ScriptContext;
/** Script-defined properties and functions */
TArray<FScriptField> ScriptDefinedFields;
/** Script context property generated for the compiled class */
FObjectProperty* ContextProperty;
};