#pragma once

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

// Package: Detection

#include "Basic.hpp"

#include "Detection_structs.hpp"
#include "Engine_structs.hpp"
#include "Engine_classes.hpp"
#include "CoreUObject_structs.hpp"


namespace SDK
{

// Class Detection.DetectableBaseComponent
// 0x0030 (0x0260 - 0x0230)
#pragma pack(push, 0x1)
class alignas(0x10) UDetectableBaseComponent : public USceneComponent
{
public:
	class UShapeComponent*                        Shape;                                             // 0x0230(0x0008)(Edit, BlueprintVisible, ExportObject, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, InstancedReference, NoDestructor, Protected, PersistentInstance, HasGetValueTypeHash, NativeAccessSpecifierProtected)
	EDetectableShapeDiscoveryMethod               DiscoveryMethod;                                   // 0x0238(0x0001)(Edit, BlueprintVisible, BlueprintReadOnly, ZeroConstructor, IsPlainOldData, NoDestructor, AdvancedDisplay, Protected, HasGetValueTypeHash, NativeAccessSpecifierProtected)
	EDetectableShapeDiscoveryScope                DiscoveryScope;                                    // 0x0239(0x0001)(Edit, BlueprintVisible, BlueprintReadOnly, ZeroConstructor, IsPlainOldData, NoDestructor, AdvancedDisplay, Protected, HasGetValueTypeHash, NativeAccessSpecifierProtected)
	uint8                                         Pad_23A[0x2];                                      // 0x023A(0x0002)(Fixing Size After Last Property [ Dumper-7 ])
	class FName                                   DiscoveryShapeName;                                // 0x023C(0x0008)(Edit, BlueprintVisible, BlueprintReadOnly, ZeroConstructor, IsPlainOldData, NoDestructor, AdvancedDisplay, Protected, HasGetValueTypeHash, NativeAccessSpecifierProtected)
	uint8                                         Pad_244[0x4];                                      // 0x0244(0x0004)(Fixing Size After Last Property [ Dumper-7 ])
	class UShapeComponent*                        SelectedShape;                                     // 0x0248(0x0008)(ExportObject, ZeroConstructor, InstancedReference, NoDestructor, Protected, HasGetValueTypeHash, NativeAccessSpecifierProtected)
	uint8                                         Pad_250[0x8];                                      // 0x0250(0x0008)(Fixing Struct Size After Last Property [ Dumper-7 ])

public:
	void BindShape(class UShapeComponent* NewShape);
	class UShapeComponent* GetShape();
	class UBoxComponent* GetShapeAsBox();
	class UCapsuleComponent* GetShapeAsCapsule();
	class USphereComponent* GetShapeAsSphere();

	bool ContainsPoint(const struct FVector& WorldLocation) const;
	bool HasShape() const;

public:
	static class UClass* StaticClass()
	{
		STATIC_CLASS_IMPL("DetectableBaseComponent")
	}
	static const class FName& StaticName()
	{
		STATIC_NAME_IMPL(L"DetectableBaseComponent")
	}
	static class UDetectableBaseComponent* GetDefaultObj()
	{
		return GetDefaultObjImpl<UDetectableBaseComponent>();
	}
};
#pragma pack(pop)
DUMPER7_ASSERTS_UDetectableBaseComponent;

// Class Detection.RaycastDetectableComponent
// 0x04C0 (0x0720 - 0x0260)
class URaycastDetectableComponent : public UDetectableBaseComponent
{
public:
	TMulticastInlineDelegate<void(class AActor* Detector, ECollisionChannel CollisionChannel, const struct FRaycastDetectableDetectEventData& Data, const struct FHitResult& HitResult)> OnDetectedBy; // 0x0258(0x0010)(ZeroConstructor, InstancedReference, BlueprintAssignable, Protected, NativeAccessSpecifierProtected)
	TMulticastInlineDelegate<void(class AActor* Detector, ECollisionChannel CollisionChannel, const struct FRaycastDetectableLoseEventData& Data)> OnLostBy; // 0x0268(0x0010)(ZeroConstructor, InstancedReference, BlueprintAssignable, Protected, NativeAccessSpecifierProtected)
	TArray<struct FRaycastDetectableChannelConfig> ChannelConfigs;                                   // 0x0278(0x0010)(Edit, BlueprintVisible, BlueprintReadOnly, ZeroConstructor, DisableEditOnInstance, Protected, NativeAccessSpecifierProtected)
	uint8                                         Pad_288[0x481];                                    // 0x0288(0x0481)(Fixing Size After Last Property [ Dumper-7 ])
	bool                                          bCheckAdditionalLOSToComponent;                    // 0x0709(0x0001)(Edit, ZeroConstructor, IsPlainOldData, NoDestructor, Protected, HasGetValueTypeHash, NativeAccessSpecifierProtected)
	uint8                                         Pad_70A[0x2];                                      // 0x070A(0x0002)(Fixing Size After Last Property [ Dumper-7 ])
	class FName                                   ComponentLOSTag;                                   // 0x070C(0x0008)(Edit, ZeroConstructor, IsPlainOldData, NoDestructor, Protected, HasGetValueTypeHash, NativeAccessSpecifierProtected)
	uint8                                         Pad_714[0x4];                                      // 0x0714(0x0004)(Fixing Size After Last Property [ Dumper-7 ])
	class USceneComponent*                        SceneComponentLOS;                                 // 0x0718(0x0008)(ExportObject, ZeroConstructor, InstancedReference, NoDestructor, Protected, HasGetValueTypeHash, NativeAccessSpecifierProtected)

public:
	void DisableDetection();
	bool DisableDetectionOnChannel(const ECollisionChannel CollisionChannel);
	void EnableDetection();
	bool EnableDetectionOnChannel(const ECollisionChannel CollisionChannel);
	bool GetWasEverDetected();
	void LoseDetectors();
	void LoseDetectorsOnChannel(const ECollisionChannel CollisionChannel);
	void SetCheckAdditionalLOSToComponent(bool bInCheckAdditionalLOSToComponent);

	bool CanBeDetectedByActor(class AActor* Detector, const float Distance) const;
	bool CanBeDetectedByActorOnChannel(class AActor* Detector, const ECollisionChannel CollisionChannel, const float Distance) const;
	bool CanBeDetectedOnChannel(const ECollisionChannel CollisionChannel) const;
	bool GetCheckAdditionalLOSToComponent() const;
	ERaycastDetectableDistanceMethod GetDistanceMethodForChannel(const ECollisionChannel CollisionChannel) const;
	class USceneComponent* GetSceneComponentLOS() const;
	bool IsDetectedByActor(class AActor* Detector) const;
	bool IsDetectedByActorOnChannel(class AActor* Detector, const ECollisionChannel CollisionChannel) const;
	bool IsDetectedOnChannel(const ECollisionChannel CollisionChannel) const;
	bool IsUsingChannel(const ECollisionChannel CollisionChannel, const bool MustBeEnabled) const;

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

// Class Detection.RaycastDetectorComponent
// 0x0128 (0x01C8 - 0x00A0)
class URaycastDetectorComponent final : public UActorComponent
{
public:
	uint8                                         Pad_A0[0x128];                                     // 0x00A0(0x0128)(Fixing Struct Size After Last Property [ Dumper-7 ])

public:
	void LoseDetectedObjects(struct FRaycastDetectorTraceData* Data);
	void ProcessData(struct FRaycastDetectorTraceData* Data, const struct FVector& TraceStart, const struct FVector& TraceEnd);

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

// Class Detection.ScreenDetectableComponent
// 0x0320 (0x0580 - 0x0260)
class UScreenDetectableComponent : public UDetectableBaseComponent
{
public:
	TMulticastInlineDelegate<void(class UScreenDetectableComponent* Detectable)> OnDetected;         // 0x0258(0x0010)(ZeroConstructor, InstancedReference, BlueprintAssignable, Protected, NativeAccessSpecifierProtected)
	TMulticastInlineDelegate<void(class UScreenDetectableComponent* Detectable)> OnLost;             // 0x0268(0x0010)(ZeroConstructor, InstancedReference, BlueprintAssignable, Protected, NativeAccessSpecifierProtected)
	EScreenDetectableCheckQuality                 Quality;                                           // 0x0278(0x0001)(Edit, BlueprintVisible, BlueprintReadOnly, ZeroConstructor, IsPlainOldData, NoDestructor, Protected, HasGetValueTypeHash, NativeAccessSpecifierProtected)
	bool                                          UseTraces;                                         // 0x0279(0x0001)(Edit, BlueprintVisible, BlueprintReadOnly, ZeroConstructor, IsPlainOldData, NoDestructor, Protected, HasGetValueTypeHash, NativeAccessSpecifierProtected)
	ECollisionChannel                             TraceChannel;                                      // 0x027A(0x0001)(Edit, BlueprintVisible, BlueprintReadOnly, ZeroConstructor, IsPlainOldData, NoDestructor, Protected, HasGetValueTypeHash, NativeAccessSpecifierProtected)
	bool                                          LimitTraceRange;                                   // 0x027B(0x0001)(Edit, BlueprintVisible, BlueprintReadOnly, ZeroConstructor, IsPlainOldData, NoDestructor, Protected, HasGetValueTypeHash, NativeAccessSpecifierProtected)
	uint8                                         Pad_27C[0x4];                                      // 0x027C(0x0004)(Fixing Size After Last Property [ Dumper-7 ])
	struct FVector2D                              TraceRange;                                        // 0x0280(0x0010)(Edit, BlueprintVisible, BlueprintReadOnly, ZeroConstructor, IsPlainOldData, NoDestructor, Protected, HasGetValueTypeHash, NativeAccessSpecifierProtected)
	bool                                          LimitTraceAngle;                                   // 0x0290(0x0001)(Edit, BlueprintVisible, BlueprintReadOnly, ZeroConstructor, IsPlainOldData, NoDestructor, Protected, HasGetValueTypeHash, NativeAccessSpecifierProtected)
	uint8                                         Pad_291[0x3];                                      // 0x0291(0x0003)(Fixing Size After Last Property [ Dumper-7 ])
	float                                         TraceAngle;                                        // 0x0294(0x0004)(Edit, BlueprintVisible, BlueprintReadOnly, ZeroConstructor, IsPlainOldData, NoDestructor, Protected, HasGetValueTypeHash, NativeAccessSpecifierProtected)
	bool                                          StartEnabled;                                      // 0x0298(0x0001)(Edit, BlueprintVisible, BlueprintReadOnly, ZeroConstructor, IsPlainOldData, NoDestructor, Protected, HasGetValueTypeHash, NativeAccessSpecifierProtected)
	bool                                          DrawDebug;                                         // 0x0299(0x0001)(Edit, BlueprintVisible, BlueprintReadOnly, ZeroConstructor, IsPlainOldData, NoDestructor, Protected, HasGetValueTypeHash, NativeAccessSpecifierProtected)
	uint8                                         Pad_29A[0x6];                                      // 0x029A(0x0006)(Fixing Size After Last Property [ Dumper-7 ])
	TArray<struct FVector>                        RelativeCheckLocations;                            // 0x02A0(0x0010)(Edit, ZeroConstructor, EditConst, AdvancedDisplay, Protected, NativeAccessSpecifierProtected)
	EScreenDetectableStatus                       CurrentStatus;                                     // 0x02B0(0x0001)(Edit, ZeroConstructor, EditConst, IsPlainOldData, NoDestructor, AdvancedDisplay, Protected, HasGetValueTypeHash, NativeAccessSpecifierProtected)
	uint8                                         Pad_2B1[0x2CF];                                    // 0x02B1(0x02CF)(Fixing Struct Size After Last Property [ Dumper-7 ])

public:
	void SetDetectionEnabled(class UObject* Object, const bool Enabled);

	EScreenDetectableStatus GetCurrentStatus() const;
	bool IsDetected() const;
	bool IsDetectionEnabled() const;

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

}

