// Copyright (c) 2024 Codemongous LLC. All Rights Reserved.

#pragma once

#include "CoreMinimal.h"
#include <memory>
#include "GameFramework/Actor.h"
#include "Misc/FeedbackContext.h"
#include "Modules/ModuleManager.h"
#include "ISCW_AActor.h"
#include "ISCW_EngineVersionComparison.h"
#include "ISCW_FArrayProperty.h"
#include "ISCW_FAssetData.h"
#include "ISCW_FBPInterfaceDescription.h"
#include "ISCW_FBPVariableDescription.h"
#include "ISCW_FBlackboardEntry.h"
#include "ISCW_FBoolProperty.h"
#include "ISCW_FByteProperty.h"
#include "ISCW_FClassProperty.h"
#include "ISCW_FComponentKey.h"
#include "ISCW_FDelegateProperty.h"
#include "ISCW_FDoubleProperty.h"
#include "ISCW_FEdGraphPinType.h"
#include "ISCW_FEdGraphTerminalType.h"
#include "ISCW_FEnumProperty.h"
#include "ISCW_FField.h"
#include "ISCW_FFieldVariant.h"
#include "ISCW_FFloatProperty.h"
#include "ISCW_FGraphNodeCreator.h"
#include "ISCW_FImplementedInterface.h"
#include "ISCW_FInterfaceProperty.h"
#include "ISCW_FMapProperty.h"
#include "ISCW_FMemberReference.h"
#include "ISCW_FMulticastDelegateProperty.h"
#include "ISCW_FNameProperty.h"
#include "ISCW_FNumericProperty.h"
#include "ISCW_FObjectProperty.h"
#include "ISCW_FObjectPropertyBase.h"
#include "ISCW_FOptionalPinFromProperty.h"
#include "ISCW_FProperty.h"
#include "ISCW_FPropertyChangedEvent.h"
#include "ISCW_FSetProperty.h"
#include "ISCW_FSimpleMemberReference.h"
#include "ISCW_FSlowTask.h"
#include "ISCW_FSoftClassProperty.h"
#include "ISCW_FSoftObjectProperty.h"
#include "ISCW_FStrProperty.h"
#include "ISCW_FStructProperty.h"
#include "ISCW_FStructVariableDescription.h"
#include "ISCW_FSubobjectData.h"
#include "ISCW_FSubobjectDataHandle.h"
#include "ISCW_FTextProperty.h"
#include "ISCW_FUserPinInfo.h"
#include "ISCW_FWeakObjectProperty.h"
#include "ISCW_UAIGraph.h"
#include "ISCW_UActorComponent.h"
#include "ISCW_UAnimBlueprint.h"
#include "ISCW_UAnimationGraph.h"
#include "ISCW_UBaseWidgetBlueprint.h"
#include "ISCW_UBehaviorTree.h"
#include "ISCW_UBehaviorTreeGraph.h"
#include "ISCW_UBlackboardData.h"
#include "ISCW_UBlackboardKeyType.h"
#include "ISCW_UBlackboardKeyType_Enum.h"
#include "ISCW_UBlueprint.h"
#include "ISCW_UBlueprintGeneratedClass.h"
#include "ISCW_UClass.h"
#include "ISCW_UDataAsset.h"
#include "ISCW_UDataTable.h"
#include "ISCW_UEdGraph.h"
#include "ISCW_UEdGraphNode.h"
#include "ISCW_UEdGraphPin.h"
#include "ISCW_UEdGraphSchema.h"
#include "ISCW_UEdGraphSchema_K2.h"
#include "ISCW_UEnum.h"
#include "ISCW_UFunction.h"
#include "ISCW_UGeneralProjectSettings.h"
#include "ISCW_UInheritableComponentHandler.h"
#include "ISCW_UInterface.h"
#include "ISCW_UK2Node.h"
#include "ISCW_UK2Node_AddComponent.h"
#include "ISCW_UK2Node_AddDelegate.h"
#include "ISCW_UK2Node_AssignDelegate.h"
#include "ISCW_UK2Node_BaseMCDelegate.h"
#include "ISCW_UK2Node_BreakStruct.h"
#include "ISCW_UK2Node_CallArrayFunction.h"
#include "ISCW_UK2Node_CallFunction.h"
#include "ISCW_UK2Node_CallParentFunction.h"
#include "ISCW_UK2Node_CastByteToEnum.h"
#include "ISCW_UK2Node_ComponentBoundEvent.h"
#include "ISCW_UK2Node_CreateDelegate.h"
#include "ISCW_UK2Node_CustomEvent.h"
#include "ISCW_UK2Node_DynamicCast.h"
#include "ISCW_UK2Node_EditablePinBase.h"
#include "ISCW_UK2Node_EnumEquality.h"
#include "ISCW_UK2Node_Event.h"
#include "ISCW_UK2Node_ForEachElementInEnum.h"
#include "ISCW_UK2Node_FunctionEntry.h"
#include "ISCW_UK2Node_FunctionResult.h"
#include "ISCW_UK2Node_FunctionTerminator.h"
#include "ISCW_UK2Node_GetArrayItem.h"
#include "ISCW_UK2Node_MacroInstance.h"
#include "ISCW_UK2Node_MakeStruct.h"
#include "ISCW_UK2Node_Message.h"
#include "ISCW_UK2Node_Select.h"
#include "ISCW_UK2Node_SetFieldsInStruct.h"
#include "ISCW_UK2Node_StructMemberGet.h"
#include "ISCW_UK2Node_StructMemberSet.h"
#include "ISCW_UK2Node_StructOperation.h"
#include "ISCW_UK2Node_Switch.h"
#include "ISCW_UK2Node_SwitchEnum.h"
#include "ISCW_UK2Node_Tunnel.h"
#include "ISCW_UK2Node_Variable.h"
#include "ISCW_UK2Node_VariableGet.h"
#include "ISCW_UK2Node_VariableSet.h"
#include "ISCW_ULevel.h"
#include "ISCW_ULevelScriptBlueprint.h"
#include "ISCW_ULevelSequence.h"
#include "ISCW_UMeshComponent.h"

#if ISCW_UE_VERSION_OLDER_THAN(5, 6, 0)
#include "ISCW_UMetaData.h"
#else
#include "ISCW_FMetaData.h"
#endif // ISCW_UE_VERSION_OLDER_THAN(5, 6, 0)

#include "ISCW_UMovieSceneSequence.h"
#include "ISCW_UMovieSceneSignedObject.h"
#include "ISCW_UObjectRedirector.h"
#include "ISCW_UPackage.h"
#include "ISCW_UPrimitiveComponent.h"
#include "ISCW_UPropertyWrapper.h"
#include "ISCW_USCS_Node.h"
#include "ISCW_USceneComponent.h"
#include "ISCW_USimpleConstructionScript.h"
#include "ISCW_UStateTree.h"
#include "ISCW_UUserDefinedStruct.h"
#include "ISCW_UUserDefinedStructEditorData.h"
#include "ISCW_UUserWidgetBlueprint.h"
#include "ISCW_UVisual.h"
#include "ISCW_UWidget.h"
#include "ISCW_UWidgetBlueprint.h"
#include "ISCW_UWidgetBlueprintGeneratedClass.h"
#include "ISCW_UWidgetComponent.h"
#include "ISCW_UWidgetTree.h"
#include "ISCW_UWorld.h"
#include "ISCW_UnrealEngine.h"
#include "ISCW_UObject.h"
#include "ISCW_UScriptStruct.h"
#include "ISCW_UStruct.h"
#include "ISCW_UUserDefinedEnum.h"
#include "Modules/ModuleInterface.h"

struct FStructVariableDescription;
class UBaseWidgetBlueprint;
class UK2Node_AddDelegate;
class UK2Node_BaseMCDelegate;
class UK2Node_ComponentBoundEvent;
class UK2Node_CustomEvent;
class UK2Node_Event;
class UK2Node_FunctionEntry;
class UK2Node_FunctionTerminator;
class USCS_Node;
class UUserWidgetBlueprint;
class UVisual;
class UWidgetBlueprint;
class UWidget;
class UUserDefinedEnum;
class UUserDefinedStructEditorData;
class UUserDefinedStruct;
struct FSubobjectDataHandle;
struct FSubobjectData;
class UK2Node_AddComponent;
class UK2Node_AssignDelegate;
class UK2Node_BreakStruct;
class UK2Node_CallArrayFunction;
class UK2Node_CallFunction;
class UK2Node_CallParentFunction;
class UK2Node_CastByteToEnum;
class UK2Node_CreateDelegate;
class UK2Node_DynamicCast;
class UK2Node_EnumEquality;
class UK2Node_ForEachElementInEnum;
class UK2Node_FunctionResult;
class UK2Node_GetArrayItem;
class UK2Node_MacroInstance;
class UK2Node_MakeStruct;
class UK2Node_Message;
class UK2Node_Select;
class UK2Node_SetFieldsInStruct;
class UK2Node_StructMemberGet;
class UK2Node_StructMemberSet;
class UK2Node_StructOperation;
class UK2Node_SwitchEnum;
class UK2Node_Switch;
class UK2Node_Tunnel;
class UK2Node_VariableGet;
class UK2Node_Variable;
class UK2Node_VariableSet;
class UWidgetBlueprintGeneratedClass;
class UWidgetTree;
struct FComponentKey;
class UAnimationGraph;
class UWidgetComponent;
class UGeneralProjectSettings;
class ULevelScriptBlueprint;
class UObject;
class UBlueprint;
class USimpleConstructionScript;
class USceneComponent;
class UScriptStruct;
class UStateTree;
class UStruct;
class UWorld;
struct FBlackboardEntry;
struct FBPInterfaceDescription;
struct FBPVariableDescription;
class FBoolProperty;
class FByteProperty;
class FClassProperty;
struct FComponentKey;
class FDelegateProperty;
class FDoubleProperty;
struct FEdGraphPinType;
struct FEdGraphTerminalType;
class FEnumProperty;
class FField;
class FFieldVariant;
class FFloatProperty;
struct FImplementedInterface;
class FInterfaceProperty;
class FMapProperty;
struct FMemberReference;
class FMulticastDelegateProperty;
class FNameProperty;
class FNumericProperty;
class FObjectProperty;
class FObjectPropertyBase;
struct FOptionalPinFromProperty;
class FProperty;
struct FPropertyChangedEvent;
class FSetProperty;
struct FSimpleMemberReference;
struct FAssetData;
struct FUserPinInfo;
class FWeakObjectProperty;
class UActorComponent;
class UAIGraph;
class UAnimBlueprint;
class UBehaviorTree;
class UBehaviorTreeGraph;
class UBlackboardData;
class UBlueprintGeneratedClass;
class UBlackboardKeyType;
class UBlackboardKeyType_Enum;
class UDataAsset;
class UDataTable;
class UEdGraph;
class UEdGraphNode;
class UEdGraphPin;
class UEdGraphSchema;
class UEdGraphSchema_K2;
class UEnum;
class UField;
class UFunction;
class UInheritableComponentHandler;
class UInterface;
class UK2Node;
class UK2Node_EditablePinBase;
class ULevel;
class ULevelSequence;
class UMeshComponent;

#if ISCW_UE_VERSION_OLDER_THAN(5, 6, 0)
class UMetaData;
#else
class FMetaData;
#endif // ISCW_UE_VERSION_OLDER_THAN(5, 6, 0)

class UMovieSceneSequence;
class UMovieSceneSignedObject;
class UPackage;
class UPrimitiveComponent;
class UPropertyWrapper;
template<typename>
struct FGraphNodeCreator;

namespace Sourcify
{
	class FSourcifyCoreUEWrapper : public FDefaultModuleImpl
	{
	public:
		void StartupModule() override;
		void ShutdownModule() override;

		static inline FSourcifyCoreUEWrapper& Get()
		{
			return FModuleManager::LoadModuleChecked<FSourcifyCoreUEWrapper>("SourcifyCoreUEWrapper");
		}
		
		SOURCIFYCOREUEWRAPPER_API static UBlueprint* Unwrap(ISCW_UBlueprintConstPtr Blueprint);
		SOURCIFYCOREUEWRAPPER_API static UObject* Unwrap(ISCW_UObjectConstPtr Object);
		SOURCIFYCOREUEWRAPPER_API static UPackage* Unwrap(ISCW_UPackageConstPtr Package);
		SOURCIFYCOREUEWRAPPER_API ISCW_UnrealEnginePtr CreateEngineInterface() const;

		// PUBLIC WRAPPERS BEGIN
		SOURCIFYCOREUEWRAPPER_API ISCW_AActorPtr Wrap(AActor& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_FArrayPropertyPtr Wrap(FArrayProperty& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_FAssetDataPtr Wrap(FAssetData& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_FBPInterfaceDescriptionPtr Wrap(FBPInterfaceDescription& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_FBPVariableDescriptionPtr Wrap(FBPVariableDescription& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_FBlackboardEntryPtr Wrap(FBlackboardEntry& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_FBoolPropertyPtr Wrap(FBoolProperty& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_FBytePropertyPtr Wrap(FByteProperty& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_FClassPropertyPtr Wrap(FClassProperty& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_FComponentKeyPtr Wrap(FComponentKey& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_FDelegatePropertyPtr Wrap(FDelegateProperty& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_FDoublePropertyPtr Wrap(FDoubleProperty& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_FEdGraphPinTypePtr Wrap(FEdGraphPinType& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_FEdGraphTerminalTypePtr Wrap(FEdGraphTerminalType& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_FEnumPropertyPtr Wrap(FEnumProperty& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_FFieldPtr Wrap(FField& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_FFieldVariantPtr Wrap(FFieldVariant& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_FFloatPropertyPtr Wrap(FFloatProperty& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_FGraphNodeCreator_UK2Node_EventPtr Wrap(FGraphNodeCreator<UK2Node_Event>& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_FGraphNodeCreator_UK2Node_CreateDelegatePtr Wrap(FGraphNodeCreator<UK2Node_CreateDelegate>& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_FImplementedInterfacePtr Wrap(FImplementedInterface& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_FInterfacePropertyPtr Wrap(FInterfaceProperty& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_FMapPropertyPtr Wrap(FMapProperty& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_FMemberReferencePtr Wrap(FMemberReference& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_FMulticastDelegatePropertyPtr Wrap(FMulticastDelegateProperty& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_FNamePropertyPtr Wrap(FNameProperty& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_FNumericPropertyPtr Wrap(FNumericProperty& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_FObjectPropertyPtr Wrap(FObjectProperty& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_FObjectPropertyBasePtr Wrap(FObjectPropertyBase& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_FOptionalPinFromPropertyPtr Wrap(FOptionalPinFromProperty& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_FPropertyPtr Wrap(FProperty& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_FPropertyChangedEventPtr Wrap(FPropertyChangedEvent& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_FSetPropertyPtr Wrap(FSetProperty& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_FSimpleMemberReferencePtr Wrap(FSimpleMemberReference& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_FSlowTaskPtr Wrap(FSlowTask& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_FSoftClassPropertyPtr Wrap(FSoftClassProperty& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_FSoftObjectPropertyPtr Wrap(FSoftObjectProperty& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_FStrPropertyPtr Wrap(FStrProperty& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_FStructPropertyPtr Wrap(FStructProperty& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_FStructVariableDescriptionPtr Wrap(FStructVariableDescription& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_FSubobjectDataPtr Wrap(FSubobjectData& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_FSubobjectDataHandlePtr Wrap(FSubobjectDataHandle& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_FTextPropertyPtr Wrap(FTextProperty& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_FUserPinInfoPtr Wrap(FUserPinInfo& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_FWeakObjectPropertyPtr Wrap(FWeakObjectProperty& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UAIGraphPtr Wrap(UAIGraph& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UActorComponentPtr Wrap(UActorComponent& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UAnimBlueprintPtr Wrap(UAnimBlueprint& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UAnimationGraphPtr Wrap(UAnimationGraph& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UBaseWidgetBlueprintPtr Wrap(UBaseWidgetBlueprint& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UBehaviorTreePtr Wrap(UBehaviorTree& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UBehaviorTreeGraphPtr Wrap(UBehaviorTreeGraph& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UBlackboardDataPtr Wrap(UBlackboardData& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UBlackboardKeyTypePtr Wrap(UBlackboardKeyType& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UBlackboardKeyType_EnumPtr Wrap(UBlackboardKeyType_Enum& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UBlueprintPtr Wrap(UBlueprint& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UBlueprintGeneratedClassPtr Wrap(UBlueprintGeneratedClass& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UClassPtr Wrap(UClass& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UDataAssetPtr Wrap(UDataAsset& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UDataTablePtr Wrap(UDataTable& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UEdGraphPtr Wrap(UEdGraph& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UEdGraphNodePtr Wrap(UEdGraphNode& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UEdGraphPinPtr Wrap(UEdGraphPin& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UEdGraphSchemaPtr Wrap(UEdGraphSchema& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UEdGraphSchema_K2Ptr Wrap(UEdGraphSchema_K2& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UEnumPtr Wrap(UEnum& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UFieldPtr Wrap(UField& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UFunctionPtr Wrap(UFunction& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UGeneralProjectSettingsPtr Wrap(UGeneralProjectSettings& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UInheritableComponentHandlerPtr Wrap(UInheritableComponentHandler& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UInterfacePtr Wrap(UInterface& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UK2NodePtr Wrap(UK2Node& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UK2Node_AddComponentPtr Wrap(UK2Node_AddComponent& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UK2Node_AddDelegatePtr Wrap(UK2Node_AddDelegate& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UK2Node_AssignDelegatePtr Wrap(UK2Node_AssignDelegate& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UK2Node_BaseMCDelegatePtr Wrap(UK2Node_BaseMCDelegate& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UK2Node_BreakStructPtr Wrap(UK2Node_BreakStruct& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UK2Node_CallArrayFunctionPtr Wrap(UK2Node_CallArrayFunction& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UK2Node_CallFunctionPtr Wrap(UK2Node_CallFunction& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UK2Node_CallParentFunctionPtr Wrap(UK2Node_CallParentFunction& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UK2Node_CastByteToEnumPtr Wrap(UK2Node_CastByteToEnum& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UK2Node_ComponentBoundEventPtr Wrap(UK2Node_ComponentBoundEvent& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UK2Node_CreateDelegatePtr Wrap(UK2Node_CreateDelegate& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UK2Node_CustomEventPtr Wrap(UK2Node_CustomEvent& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UK2Node_DynamicCastPtr Wrap(UK2Node_DynamicCast& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UK2Node_EditablePinBasePtr Wrap(UK2Node_EditablePinBase& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UK2Node_EnumEqualityPtr Wrap(UK2Node_EnumEquality& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UK2Node_EventPtr Wrap(UK2Node_Event& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UK2Node_ForEachElementInEnumPtr Wrap(UK2Node_ForEachElementInEnum& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UK2Node_FunctionEntryPtr Wrap(UK2Node_FunctionEntry& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UK2Node_FunctionResultPtr Wrap(UK2Node_FunctionResult& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UK2Node_FunctionTerminatorPtr Wrap(UK2Node_FunctionTerminator& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UK2Node_GetArrayItemPtr Wrap(UK2Node_GetArrayItem& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UK2Node_MacroInstancePtr Wrap(UK2Node_MacroInstance& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UK2Node_MakeStructPtr Wrap(UK2Node_MakeStruct& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UK2Node_MessagePtr Wrap(UK2Node_Message& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UK2Node_SelectPtr Wrap(UK2Node_Select& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UK2Node_SetFieldsInStructPtr Wrap(UK2Node_SetFieldsInStruct& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UK2Node_StructMemberGetPtr Wrap(UK2Node_StructMemberGet& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UK2Node_StructMemberSetPtr Wrap(UK2Node_StructMemberSet& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UK2Node_StructOperationPtr Wrap(UK2Node_StructOperation& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UK2Node_SwitchPtr Wrap(UK2Node_Switch& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UK2Node_SwitchEnumPtr Wrap(UK2Node_SwitchEnum& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UK2Node_TunnelPtr Wrap(UK2Node_Tunnel& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UK2Node_VariablePtr Wrap(UK2Node_Variable& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UK2Node_VariableGetPtr Wrap(UK2Node_VariableGet& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UK2Node_VariableSetPtr Wrap(UK2Node_VariableSet& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_ULevelPtr Wrap(ULevel& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_ULevelScriptBlueprintPtr Wrap(ULevelScriptBlueprint& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_ULevelSequencePtr Wrap(ULevelSequence& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UMeshComponentPtr Wrap(UMeshComponent& objectToWrap) const;
#if ISCW_UE_VERSION_OLDER_THAN(5, 6, 0)
		SOURCIFYCOREUEWRAPPER_API ISCW_UMetaDataPtr Wrap(UMetaData& objectToWrap) const;
#else
		SOURCIFYCOREUEWRAPPER_API ISCW_FMetaDataPtr Wrap(FMetaData& objectToWrap) const;
#endif // ISCW_UE_VERSION_OLDER_THAN(5, 6, 0)
		SOURCIFYCOREUEWRAPPER_API ISCW_UMovieSceneSequencePtr Wrap(UMovieSceneSequence& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UMovieSceneSignedObjectPtr Wrap(UMovieSceneSignedObject& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UObjectPtr Wrap(UObject& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UObjectRedirectorPtr Wrap(UObjectRedirector& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UPackagePtr Wrap(UPackage& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UPrimitiveComponentPtr Wrap(UPrimitiveComponent& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UPropertyWrapperPtr Wrap(UPropertyWrapper& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_USCS_NodePtr Wrap(USCS_Node& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_USceneComponentPtr Wrap(USceneComponent& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UScriptStructPtr Wrap(UScriptStruct& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_USimpleConstructionScriptPtr Wrap(USimpleConstructionScript& objectToWrap) const;
#if ISCW_UE_VERSION_NEWER_THAN_OR_EQUAL(5,6,0)
		SOURCIFYCOREUEWRAPPER_API ISCW_UStateTreePtr Wrap(UStateTree& objectToWrap) const;
#endif
		SOURCIFYCOREUEWRAPPER_API ISCW_UStructPtr Wrap(UStruct& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UUserDefinedEnumPtr Wrap(UUserDefinedEnum& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UUserDefinedStructPtr Wrap(UUserDefinedStruct& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UUserDefinedStructEditorDataPtr Wrap(UUserDefinedStructEditorData& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UUserWidgetBlueprintPtr Wrap(UUserWidgetBlueprint& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UVisualPtr Wrap(UVisual& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UWidgetPtr Wrap(UWidget& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UWidgetBlueprintPtr Wrap(UWidgetBlueprint& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UWidgetBlueprintGeneratedClassPtr Wrap(UWidgetBlueprintGeneratedClass& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UWidgetComponentPtr Wrap(UWidgetComponent& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UWidgetTreePtr Wrap(UWidgetTree& objectToWrap) const;
		SOURCIFYCOREUEWRAPPER_API ISCW_UWorldPtr Wrap(UWorld& objectToWrap) const;
		// PUBLIC WRAPPERS END

	private:
		// PRIVATE WRAPPERS BEGIN
		ISCW_FAssetDataPtr WrapInternal(FAssetData& objectToWrap) const;

		ISCW_FBlackboardEntryPtr WrapInternal(FBlackboardEntry& objectToWrap) const;

		ISCW_FBPInterfaceDescriptionPtr WrapInternal(FBPInterfaceDescription& objectToWrap) const;

		ISCW_FBPVariableDescriptionPtr WrapInternal(FBPVariableDescription& objectToWrap) const;

		ISCW_FComponentKeyPtr WrapInternal(FComponentKey& objectToWrap) const;

		ISCW_FEdGraphPinTypePtr WrapInternal(FEdGraphPinType& objectToWrap) const;

		ISCW_FEdGraphTerminalTypePtr WrapInternal(FEdGraphTerminalType& objectToWrap) const;

		ISCW_FFieldPtr WrapInternal(FField& objectToWrap) const;

		ISCW_FFieldVariantPtr WrapInternal(FFieldVariant& objectToWrap) const;

		ISCW_FGraphNodeCreator_UK2Node_EventPtr WrapInternal(FGraphNodeCreator<UK2Node_Event>& objectToWrap) const;

		ISCW_FGraphNodeCreator_UK2Node_CreateDelegatePtr WrapInternal(FGraphNodeCreator<UK2Node_CreateDelegate>& objectToWrap) const;

		ISCW_FImplementedInterfacePtr WrapInternal(FImplementedInterface& objectToWrap) const;

		ISCW_FMemberReferencePtr WrapInternal(FMemberReference& objectToWrap) const;

#if ISCW_UE_VERSION_NEWER_THAN_OR_EQUAL(5, 6, 0)
		ISCW_FMetaDataPtr WrapInternal(FMetaData& objectToWrap) const;
#endif
		ISCW_FOptionalPinFromPropertyPtr WrapInternal(FOptionalPinFromProperty& objectToWrap) const;

		ISCW_FPropertyChangedEventPtr WrapInternal(FPropertyChangedEvent& objectToWrap) const;

		ISCW_FSimpleMemberReferencePtr WrapInternal(FSimpleMemberReference& objectToWrap) const;

		ISCW_FSlowTaskPtr WrapInternal(FSlowTask& objectToWrap) const;

		ISCW_FStructVariableDescriptionPtr WrapInternal(FStructVariableDescription& objectToWrap) const;

		ISCW_FSubobjectDataPtr WrapInternal(FSubobjectData& objectToWrap) const;

		ISCW_FSubobjectDataHandlePtr WrapInternal(FSubobjectDataHandle& objectToWrap) const;

		ISCW_FUserPinInfoPtr WrapInternal(FUserPinInfo& objectToWrap) const;

		ISCW_UEdGraphPinPtr WrapInternal(UEdGraphPin& objectToWrap) const;

		ISCW_UObjectPtr WrapInternal(UObject& objectToWrap) const;

		// PRIVATE WRAPPERS END
	};
}