90 lines
3.8 KiB
C++
90 lines
3.8 KiB
C++
// Fill out your copyright notice in the Description page of Project Settings.
|
|
|
|
#pragma once
|
|
|
|
#include "CoreMinimal.h"
|
|
#include "GameplayTagContainer.h"
|
|
#include "Components/ActorComponent.h"
|
|
#include "Kismet/KismetSystemLibrary.h"
|
|
#include "CollisionComponent.generated.h"
|
|
|
|
//DECLARE_MULTICAST_DELEGATE_OneParam -> It can be changed
|
|
DECLARE_DELEGATE_OneParam(FOnHit, FHitResult);
|
|
|
|
UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) )
|
|
class D1_API UCollisionComponent : public UActorComponent
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
public:
|
|
// Sets default values for this component's properties
|
|
UCollisionComponent();
|
|
|
|
protected:
|
|
// Called when the game starts
|
|
virtual void BeginPlay() override;
|
|
|
|
public:
|
|
// Called every frame
|
|
virtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override;
|
|
|
|
public:
|
|
void CollisionTrace();
|
|
public:
|
|
TArray<AActor*> GetAlreadyHitActors() { return AlreadyHitActors; }
|
|
FORCEINLINE void ClearHitActors() { AlreadyHitActors.Empty(); }
|
|
|
|
FHitResult GetLastHit() { return LastHit; }
|
|
|
|
UPrimitiveComponent* GetCollisionMeshComponent() { return CollisionMeshComponent; }
|
|
FORCEINLINE void SetCollisionMeshComponent(UPrimitiveComponent* InputComponent) { CollisionMeshComponent = InputComponent; }
|
|
|
|
FORCEINLINE void AddActorToIgnore(AActor* inputActor) { ActorsToIgnore.Add(inputActor); }
|
|
void RemoveActorToIgnore(AActor* inputActor) { ActorsToIgnore.Remove(inputActor); }
|
|
TArray<AActor*> GetActorToIgnore() { return ActorsToIgnore; }
|
|
|
|
//Initialize
|
|
FORCEINLINE void SetTraceRaius(float inputTrace) { TraceRadius = inputTrace; }
|
|
FORCEINLINE void SetStartSocketName(FName InputStartSocketName) { StartSocketName = InputStartSocketName; }
|
|
FORCEINLINE void SetEndSocketName(FName InpuEndSocketName) { EndSocketName = InpuEndSocketName; }
|
|
FORCEINLINE void SetCollisionObjectTypes(TArray<TEnumAsByte<EObjectTypeQuery>> InputCollisionObjectTypes) { CollisionObjectTypes = InputCollisionObjectTypes; }
|
|
FORCEINLINE void SetDrawDebugType(TEnumAsByte<EDrawDebugTrace::Type> InputDrawDebugType) { DrawDebugType = InputDrawDebugType; }
|
|
FORCEINLINE void SetGameplayTagsIgnore(FGameplayTagContainer& InputGameplayTagContainer) { GameplayTagsIgnore = InputGameplayTagContainer; }
|
|
public:
|
|
UFUNCTION(BlueprintCallable)
|
|
FORCEINLINE void ActivateCollision();
|
|
UFUNCTION(BlueprintCallable)
|
|
FORCEINLINE void DeactivateCollision() { bCollisionEnabled = false; }
|
|
bool IsCollisionEnabled() { return bCollisionEnabled; }
|
|
bool CanHitActor(AActor* InActor);
|
|
private:
|
|
UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category="Initialization", meta=(AllowPrivateAccess="true"))
|
|
float TraceRadius;
|
|
UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category="Initialization", meta = (AllowPrivateAccess = "true"))
|
|
FName StartSocketName;
|
|
UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category="Initialization", meta = (AllowPrivateAccess = "true"))
|
|
FName EndSocketName;
|
|
UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category="Initialization", meta = (AllowPrivateAccess = "true"))
|
|
TArray<TEnumAsByte<EObjectTypeQuery>> CollisionObjectTypes;
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Initialization", meta = (AllowPrivateAccess = "true"))
|
|
TEnumAsByte<EDrawDebugTrace::Type> DrawDebugType;
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Initialization", meta = (AllowPrivateAccess = "true"))
|
|
FGameplayTagContainer GameplayTagsIgnore;
|
|
|
|
UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category="Components", meta = (AllowPrivateAccess = "true"))
|
|
TObjectPtr<UPrimitiveComponent> CollisionMeshComponent;
|
|
|
|
UPROPERTY()
|
|
TArray<TObjectPtr<AActor>> AlreadyHitActors;
|
|
UPROPERTY()
|
|
TArray<TObjectPtr<AActor>> ActorsToIgnore;
|
|
UPROPERTY()
|
|
TObjectPtr<AActor> HitActor;
|
|
|
|
bool bCollisionEnabled;
|
|
FHitResult LastHit;
|
|
|
|
public:
|
|
FOnHit OnHitDelegate;
|
|
};
|