// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "Components/ActorComponent.h"
#include "PhysicsEngine/PhysicsHandleComponent.h"
#include "Grabber.generated.h"


UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) )
class BUILDINGESCAPE_API UGrabber : public UActorComponent
{
	GENERATED_BODY()

public:	
	// Sets default values for this component's properties
	UGrabber();

	// Called every frame
	virtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override;

protected:
	// Called when the game starts
	virtual void BeginPlay() override;

private:
	UPROPERTY(EditAnywhere)
	float Reach = 100.f;

	UPROPERTY() //Everything with a U has a UPROPERTY
	UPhysicsHandleComponent* PhysicsHandle = nullptr; //protection against crashes
	
	UPROPERTY()
	UInputComponent* InputComponent = nullptr; 
		
	void Grab();
	void GrabRelease();
	void FindPhysicsHandle();
	void SetupInputComponent();

	//return the first Actor in Reach with physicsbody
	FHitResult GetFirstPhysicsBodyInReach() const;
	
	//Return Players Line Trace End
	FVector GetLineTraceEnd() const; // playersReach

	//Get Players Position in the World
	FVector GetPlayerWorldPosition() const;
};
