#pragma once

/*
* SDK generated by Dumper-7
*
* https://github.com/Encryqed/Dumper-7
*/

// Package: GeometryFramework

#include "Basic.hpp"

#include "CoreUObject_structs.hpp"
#include "CoreUObject_classes.hpp"
#include "Engine_structs.hpp"
#include "Engine_classes.hpp"
#include "GeometryFramework_structs.hpp"
#include "PhysicsCore_structs.hpp"


SDK_NAMESPACE_START

// Class GeometryFramework.BaseDynamicMeshComponent
// 0x0080 (0x05F0 - 0x0570)
class UBaseDynamicMeshComponent : public UMeshComponent
{
public:
	uint8                                         Pad_568[0x20];                                     // 0x0568(0x0020)(Fixing Size After Last Property [ Dumper-7 ])
	bool                                          bExplicitShowWireframe;                            // 0x0588(0x0001)(Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData, NoDestructor, HasGetValueTypeHash, NativeAccessSpecifierPublic)
	uint8                                         Pad_589[0x3];                                      // 0x0589(0x0003)(Fixing Size After Last Property [ Dumper-7 ])
	struct FLinearColor                           WireframeColor;                                    // 0x058C(0x0010)(Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData, NoDestructor, HasGetValueTypeHash, NativeAccessSpecifierPublic)
	EDynamicMeshComponentColorOverrideMode        ColorMode;                                         // 0x059C(0x0001)(Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData, NoDestructor, HasGetValueTypeHash, NativeAccessSpecifierPublic)
	uint8                                         Pad_59D[0x3];                                      // 0x059D(0x0003)(Fixing Size After Last Property [ Dumper-7 ])
	struct FColor                                 ConstantColor;                                     // 0x05A0(0x0004)(Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData, NoDestructor, HasGetValueTypeHash, NativeAccessSpecifierPublic)
	EDynamicMeshVertexColorTransformMode          ColorSpaceMode;                                    // 0x05A4(0x0001)(Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData, NoDestructor, HasGetValueTypeHash, NativeAccessSpecifierPublic)
	bool                                          bEnableFlatShading;                                // 0x05A5(0x0001)(Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData, NoDestructor, HasGetValueTypeHash, NativeAccessSpecifierPublic)
	bool                                          bEnableViewModeOverrides;                          // 0x05A6(0x0001)(Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData, NoDestructor, HasGetValueTypeHash, NativeAccessSpecifierPublic)
	uint8                                         Pad_5A7[0x1];                                      // 0x05A7(0x0001)(Fixing Size After Last Property [ Dumper-7 ])
	class UMaterialInterface*                     OverrideRenderMaterial;                            // 0x05A8(0x0008)(ZeroConstructor, NoDestructor, Protected, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierProtected, TObjectPtr)
	class UMaterialInterface*                     SecondaryRenderMaterial;                           // 0x05B0(0x0008)(ZeroConstructor, NoDestructor, Protected, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierProtected, TObjectPtr)
	uint8                                         Pad_5B8[0x8];                                      // 0x05B8(0x0008)(Fixing Size After Last Property [ Dumper-7 ])
	class UMaterialInterface*                     WireframeMaterialOverride;                         // 0x05C0(0x0008)(ZeroConstructor, NoDestructor, Protected, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierProtected, TObjectPtr)
	class UMaterialInterface*                     SecondaryWireframeMaterialOverride;                // 0x05C8(0x0008)(ZeroConstructor, NoDestructor, Protected, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierProtected, TObjectPtr)
	bool                                          bEnableRayTracing;                                 // 0x05D0(0x0001)(Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData, NoDestructor, HasGetValueTypeHash, NativeAccessSpecifierPublic)
	EDynamicMeshDrawPath                          DrawPath;                                          // 0x05D1(0x0001)(Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData, NoDestructor, Protected, HasGetValueTypeHash, NativeAccessSpecifierProtected)
	EDynamicMeshComponentDistanceFieldMode        DistanceFieldMode;                                 // 0x05D2(0x0001)(ZeroConstructor, Deprecated, IsPlainOldData, NoDestructor, Protected, HasGetValueTypeHash, NativeAccessSpecifierProtected)
	uint8                                         Pad_5D3[0x5];                                      // 0x05D3(0x0005)(Fixing Size After Last Property [ Dumper-7 ])
	TArray<class UMaterialInterface*>             BaseMaterials;                                     // 0x05D8(0x0010)(ZeroConstructor, UObjectWrapper, NativeAccessSpecifierPublic, TObjectPtr)
	uint8                                         Pad_5E8[0x8];                                      // 0x05E8(0x0008)(Fixing Struct Size After Last Property [ Dumper-7 ])

public:
	void ClearOverrideRenderMaterial();
	void ClearOverrideSecondaryWireframeRenderMaterial();
	void ClearOverrideWireframeRenderMaterial();
	void ClearSecondaryRenderMaterial();
	class UDynamicMesh* GetDynamicMesh();
	void SetColorOverrideMode(EDynamicMeshComponentColorOverrideMode NewMode);
	void SetConstantOverrideColor(const struct FColor& NewColor);
	void SetDistanceFieldMode(EDynamicMeshComponentDistanceFieldMode NewDistFieldMode);
	void SetEnableFlatShading(bool bEnable);
	void SetEnableRaytracing(bool bSetEnabled);
	void SetEnableWireframeRenderPass(bool bEnable);
	void SetMeshDrawPath(EDynamicMeshDrawPath NewDrawPath);
	void SetOverrideRenderMaterial(class UMaterialInterface* Material);
	void SetOverrideSecondaryWireframeRenderMaterial(class UMaterialInterface* Material);
	void SetOverrideWireframeRenderMaterial(class UMaterialInterface* Material);
	void SetSecondaryBuffersVisibility(bool bSetVisible);
	void SetSecondaryRenderMaterial(class UMaterialInterface* Material);
	void SetShadowsEnabled(bool bEnabled);
	void SetVertexColorSpaceTransformMode(EDynamicMeshVertexColorTransformMode NewMode);
	void SetViewModeOverridesEnabled(bool bEnabled);

	EDynamicMeshComponentColorOverrideMode GetColorOverrideMode() const;
	struct FColor GetConstantOverrideColor() const;
	EDynamicMeshComponentDistanceFieldMode GetDistanceFieldMode() const;
	bool GetEnableRaytracing() const;
	bool GetEnableWireframeRenderPass() const;
	bool GetFlatShadingEnabled() const;
	EDynamicMeshDrawPath GetMeshDrawPath() const;
	class UMaterialInterface* GetOverrideRenderMaterial(int32 MaterialIndex) const;
	class UMaterialInterface* GetOverrideSecondaryWireframeRenderMaterial() const;
	class UMaterialInterface* GetOverrideWireframeRenderMaterial() const;
	bool GetSecondaryBuffersVisibility() const;
	class UMaterialInterface* GetSecondaryRenderMaterial() const;
	bool GetShadowsEnabled() const;
	EDynamicMeshVertexColorTransformMode GetVertexColorSpaceTransformMode() const;
	bool GetViewModeOverridesEnabled() const;
	bool HasOverrideRenderMaterial(int32 K) const;

public:
	static class UClass* StaticClass()
	{
		STATIC_CLASS_IMPL("BaseDynamicMeshComponent")
	}
	static const class FName& StaticName()
	{
		STATIC_NAME_IMPL(L"BaseDynamicMeshComponent")
	}
	static class UBaseDynamicMeshComponent* GetDefaultObj()
	{
		return GetDefaultObjImpl<UBaseDynamicMeshComponent>();
	}
};
DUMPER7_ASSERTS_UBaseDynamicMeshComponent;

// Class GeometryFramework.DynamicMeshComponent
// 0x0320 (0x0910 - 0x05F0)
class UDynamicMeshComponent final : public UBaseDynamicMeshComponent
{
public:
	class UDynamicMesh*                           MeshObject;                                        // 0x05F0(0x0008)(ExportObject, ZeroConstructor, InstancedReference, NoDestructor, Protected, PersistentInstance, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierProtected, TObjectPtr)
	uint8                                         Pad_5F8[0x59];                                     // 0x05F8(0x0059)(Fixing Size After Last Property [ Dumper-7 ])
	bool                                          bAllowsGeometrySelection;                          // 0x0651(0x0001)(ZeroConstructor, IsPlainOldData, NoDestructor, HasGetValueTypeHash, NativeAccessSpecifierPrivate)
	uint8                                         Pad_652[0xCE];                                     // 0x0652(0x00CE)(Fixing Size After Last Property [ Dumper-7 ])
	EDynamicMeshComponentTangentsMode             TangentsType;                                      // 0x0720(0x0001)(Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData, NoDestructor, Protected, HasGetValueTypeHash, NativeAccessSpecifierProtected)
	uint8                                         Pad_721[0xEF];                                     // 0x0721(0x00EF)(Fixing Size After Last Property [ Dumper-7 ])
	ECollisionTraceFlag                           CollisionType;                                     // 0x0810(0x0001)(Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData, NoDestructor, HasGetValueTypeHash, NativeAccessSpecifierPublic)
	bool                                          bUseAsyncCooking;                                  // 0x0811(0x0001)(Edit, BlueprintVisible, BlueprintReadOnly, ZeroConstructor, IsPlainOldData, NoDestructor, HasGetValueTypeHash, NativeAccessSpecifierPublic)
	bool                                          bEnableComplexCollision;                           // 0x0812(0x0001)(Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData, NoDestructor, HasGetValueTypeHash, NativeAccessSpecifierPublic)
	bool                                          bDeferCollisionUpdates;                            // 0x0813(0x0001)(Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData, NoDestructor, HasGetValueTypeHash, NativeAccessSpecifierPublic)
	bool                                          bDisableMeshUVHitResults;                          // 0x0814(0x0001)(Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData, NoDestructor, HasGetValueTypeHash, NativeAccessSpecifierPublic)
	uint8                                         Pad_815[0x3];                                      // 0x0815(0x0003)(Fixing Size After Last Property [ Dumper-7 ])
	class UBodySetup*                             MeshBodySetup;                                     // 0x0818(0x0008)(ExportObject, ZeroConstructor, InstancedReference, NoDestructor, Protected, PersistentInstance, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierProtected, TObjectPtr)
	uint8                                         Pad_820[0x38];                                     // 0x0820(0x0038)(Fixing Size After Last Property [ Dumper-7 ])
	struct FKAggregateGeom                        AggGeom;                                           // 0x0858(0x00A0)(Edit, Protected, NativeAccessSpecifierProtected)
	TArray<class UBodySetup*>                     AsyncBodySetupQueue;                               // 0x08F8(0x0010)(ZeroConstructor, Transient, Protected, UObjectWrapper, NativeAccessSpecifierProtected, TObjectPtr)
	uint8                                         Pad_908[0x8];                                      // 0x0908(0x0008)(Fixing Struct Size After Last Property [ Dumper-7 ])

public:
	void ConfigureMaterialSet(const TArray<class UMaterialInterface*>& NewMaterialSet, bool bDeleteExtraSlots);
	void EnableComplexAsSimpleCollision();
	void NotifyMeshModified();
	void NotifyMeshVertexAttributesModified(bool bPositions, bool bNormals, bool bUVs, bool bColors);
	void SetAllowsGeometrySelection(bool bInAllowsGeometrySelection);
	void SetComplexAsSimpleCollisionEnabled(bool bEnabled, bool bImmediateUpdate);
	void SetDeferredCollisionUpdatesEnabled(bool bEnabled, bool bImmediateUpdate);
	void SetDynamicMesh(class UDynamicMesh* NewMesh);
	void SetTangentsType(EDynamicMeshComponentTangentsMode NewTangentsType);
	void UpdateCollision(bool bOnlyIfPending);
	bool ValidateMaterialSlots(bool bCreateIfMissing, bool bDeleteExtraSlots);

	bool AllowsGeometrySelection() const;
	EDynamicMeshComponentTangentsMode GetTangentsType() const;
	EDynamicMeshComponentTangentsMode GetTangentsTypePure() const;

public:
	static class UClass* StaticClass()
	{
		STATIC_CLASS_IMPL("DynamicMeshComponent")
	}
	static const class FName& StaticName()
	{
		STATIC_NAME_IMPL(L"DynamicMeshComponent")
	}
	static class UDynamicMeshComponent* GetDefaultObj()
	{
		return GetDefaultObjImpl<UDynamicMeshComponent>();
	}
};
DUMPER7_ASSERTS_UDynamicMeshComponent;

// Class GeometryFramework.DynamicMeshProcessorBlueprint
// 0x0000 (0x0028 - 0x0028)
class UDynamicMeshProcessorBlueprint final : public UObject
{
public:
	void ProcessDynamicMesh(class UDynamicMesh* TargetMesh, bool* bFailed);

public:
	static class UClass* StaticClass()
	{
		STATIC_CLASS_IMPL("DynamicMeshProcessorBlueprint")
	}
	static const class FName& StaticName()
	{
		STATIC_NAME_IMPL(L"DynamicMeshProcessorBlueprint")
	}
	static class UDynamicMeshProcessorBlueprint* GetDefaultObj()
	{
		return GetDefaultObjImpl<UDynamicMeshProcessorBlueprint>();
	}
};
DUMPER7_ASSERTS_UDynamicMeshProcessorBlueprint;

// Class GeometryFramework.MeshCommandChangeTarget
// 0x0000 (0x0000 - 0x0000)
class IMeshCommandChangeTarget final
{
public:
	static class UClass* StaticClass()
	{
		STATIC_CLASS_IMPL("MeshCommandChangeTarget")
	}
	static const class FName& StaticName()
	{
		STATIC_NAME_IMPL(L"MeshCommandChangeTarget")
	}
	static class IMeshCommandChangeTarget* GetDefaultObj()
	{
		return GetDefaultObjImpl<IMeshCommandChangeTarget>();
	}

	class UObject* AsUObject()
	{
		return reinterpret_cast<UObject*>(this);
	}
	const class UObject* AsUObject() const
	{
		return reinterpret_cast<const UObject*>(this);
	}
};
DUMPER7_ASSERTS_IMeshCommandChangeTarget;

// Class GeometryFramework.MeshReplacementCommandChangeTarget
// 0x0000 (0x0000 - 0x0000)
class IMeshReplacementCommandChangeTarget final
{
public:
	static class UClass* StaticClass()
	{
		STATIC_CLASS_IMPL("MeshReplacementCommandChangeTarget")
	}
	static const class FName& StaticName()
	{
		STATIC_NAME_IMPL(L"MeshReplacementCommandChangeTarget")
	}
	static class IMeshReplacementCommandChangeTarget* GetDefaultObj()
	{
		return GetDefaultObjImpl<IMeshReplacementCommandChangeTarget>();
	}

	class UObject* AsUObject()
	{
		return reinterpret_cast<UObject*>(this);
	}
	const class UObject* AsUObject() const
	{
		return reinterpret_cast<const UObject*>(this);
	}
};
DUMPER7_ASSERTS_IMeshReplacementCommandChangeTarget;

// Class GeometryFramework.MeshVertexCommandChangeTarget
// 0x0000 (0x0000 - 0x0000)
class IMeshVertexCommandChangeTarget final
{
public:
	static class UClass* StaticClass()
	{
		STATIC_CLASS_IMPL("MeshVertexCommandChangeTarget")
	}
	static const class FName& StaticName()
	{
		STATIC_NAME_IMPL(L"MeshVertexCommandChangeTarget")
	}
	static class IMeshVertexCommandChangeTarget* GetDefaultObj()
	{
		return GetDefaultObjImpl<IMeshVertexCommandChangeTarget>();
	}

	class UObject* AsUObject()
	{
		return reinterpret_cast<UObject*>(this);
	}
	const class UObject* AsUObject() const
	{
		return reinterpret_cast<const UObject*>(this);
	}
};
DUMPER7_ASSERTS_IMeshVertexCommandChangeTarget;

// Class GeometryFramework.DynamicMeshActor
// 0x0018 (0x02C0 - 0x02A8)
class ADynamicMeshActor final : public AActor
{
public:
	class UDynamicMeshComponent*                  DynamicMeshComponent;                              // 0x02A8(0x0008)(Edit, BlueprintVisible, ExportObject, BlueprintReadOnly, ZeroConstructor, EditConst, InstancedReference, NoDestructor, Protected, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierProtected, TObjectPtr)
	bool                                          bEnableComputeMeshPool;                            // 0x02B0(0x0001)(Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData, NoDestructor, HasGetValueTypeHash, NativeAccessSpecifierPublic)
	uint8                                         Pad_2B1[0x7];                                      // 0x02B1(0x0007)(Fixing Size After Last Property [ Dumper-7 ])
	class UDynamicMeshPool*                       DynamicMeshPool;                                   // 0x02B8(0x0008)(ZeroConstructor, Transient, NoDestructor, Protected, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierProtected, TObjectPtr)

public:
	class UDynamicMesh* AllocateComputeMesh();
	void FreeAllComputeMeshes();
	class UDynamicMeshPool* GetComputeMeshPool();
	void ReleaseAllComputeMeshes();
	bool ReleaseComputeMesh(class UDynamicMesh* Mesh);

	class UDynamicMeshComponent* GetDynamicMeshComponent() const;

public:
	static class UClass* StaticClass()
	{
		STATIC_CLASS_IMPL("DynamicMeshActor")
	}
	static const class FName& StaticName()
	{
		STATIC_NAME_IMPL(L"DynamicMeshActor")
	}
	static class ADynamicMeshActor* GetDefaultObj()
	{
		return GetDefaultObjImpl<ADynamicMeshActor>();
	}
};
DUMPER7_ASSERTS_ADynamicMeshActor;

// Class GeometryFramework.DynamicMeshGenerator
// 0x0000 (0x0028 - 0x0028)
class UDynamicMeshGenerator final : public UObject
{
public:
	static class UClass* StaticClass()
	{
		STATIC_CLASS_IMPL("DynamicMeshGenerator")
	}
	static const class FName& StaticName()
	{
		STATIC_NAME_IMPL(L"DynamicMeshGenerator")
	}
	static class UDynamicMeshGenerator* GetDefaultObj()
	{
		return GetDefaultObjImpl<UDynamicMeshGenerator>();
	}
};
DUMPER7_ASSERTS_UDynamicMeshGenerator;

// Class GeometryFramework.DynamicMesh
// 0x0088 (0x00B0 - 0x0028)
class UDynamicMesh final : public UObject
{
public:
	uint8                                         Pad_28[0x48];                                      // 0x0028(0x0048)(Fixing Size After Last Property [ Dumper-7 ])
	TMulticastInlineDelegate<void(class UDynamicMesh* Mesh)> MeshModifiedBPEvent;                    // 0x0070(0x0010)(ZeroConstructor, InstancedReference, BlueprintAssignable, NativeAccessSpecifierPublic)
	uint8                                         Pad_80[0x20];                                      // 0x0080(0x0020)(Fixing Size After Last Property [ Dumper-7 ])
	class UDynamicMeshGenerator*                  MeshGenerator;                                     // 0x00A0(0x0008)(ExportObject, ZeroConstructor, InstancedReference, NoDestructor, Protected, PersistentInstance, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierProtected, TObjectPtr)
	bool                                          bEnableMeshGenerator;                              // 0x00A8(0x0001)(Edit, ZeroConstructor, IsPlainOldData, NoDestructor, HasGetValueTypeHash, NativeAccessSpecifierPublic)
	uint8                                         Pad_A9[0x7];                                       // 0x00A9(0x0007)(Fixing Struct Size After Last Property [ Dumper-7 ])

public:
	class UDynamicMesh* Reset();
	class UDynamicMesh* ResetToCube();

	int32 GetTriangleCount() const;
	bool IsEmpty() const;

public:
	static class UClass* StaticClass()
	{
		STATIC_CLASS_IMPL("DynamicMesh")
	}
	static const class FName& StaticName()
	{
		STATIC_NAME_IMPL(L"DynamicMesh")
	}
	static class UDynamicMesh* GetDefaultObj()
	{
		return GetDefaultObjImpl<UDynamicMesh>();
	}
};
DUMPER7_ASSERTS_UDynamicMesh;

// Class GeometryFramework.DynamicMeshPool
// 0x0020 (0x0048 - 0x0028)
class UDynamicMeshPool final : public UObject
{
public:
	TArray<class UDynamicMesh*>                   CachedMeshes;                                      // 0x0028(0x0010)(ZeroConstructor, Protected, UObjectWrapper, NativeAccessSpecifierProtected, TObjectPtr)
	TArray<class UDynamicMesh*>                   AllCreatedMeshes;                                  // 0x0038(0x0010)(ZeroConstructor, Protected, UObjectWrapper, NativeAccessSpecifierProtected, TObjectPtr)

public:
	void FreeAllMeshes();
	class UDynamicMesh* RequestMesh();
	void ReturnAllMeshes();
	void ReturnMesh(class UDynamicMesh* Mesh);

public:
	static class UClass* StaticClass()
	{
		STATIC_CLASS_IMPL("DynamicMeshPool")
	}
	static const class FName& StaticName()
	{
		STATIC_NAME_IMPL(L"DynamicMeshPool")
	}
	static class UDynamicMeshPool* GetDefaultObj()
	{
		return GetDefaultObjImpl<UDynamicMeshPool>();
	}
};
DUMPER7_ASSERTS_UDynamicMeshPool;

SDK_NAMESPACE_END
