Guest User

TriggerComponent.cpp

a guest
May 22nd, 2026
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.33 KB | None | 0 0
  1. #include "TriggerComponent.h"
  2.  
  3. UTriggerComponent::UTriggerComponent()
  4. {
  5.     OpenForTag = "PressurePlateActivator";
  6. }
  7.  
  8. void UTriggerComponent::BeginPlay()
  9. {
  10.     Super::BeginPlay();
  11.  
  12.     if (TargetActor)
  13.     {
  14.         TargetMoverComponent = TargetActor->FindComponentByClass<UMoverComponent>();
  15.  
  16.         if (!TargetMoverComponent)
  17.         {
  18.             UE_LOG(LogTemp, Warning, TEXT("Actor %s linked to %s doesn't have a UMoverComponent"), *TargetActor->GetName(), *GetName());
  19.         }
  20.     }
  21.     else
  22.     {
  23.         UE_LOG(LogTemp, Warning, TEXT("%s is not linked to an Actor"), *GetName());
  24.     }
  25.  
  26.     OnComponentBeginOverlap.AddDynamic(this, &UTriggerComponent::OnOverlapBegin);
  27.     OnComponentEndOverlap.AddDynamic(this, &UTriggerComponent::OnOverlapEnd);
  28. }
  29.  
  30. void UTriggerComponent::OnOverlapBegin(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult)
  31. {
  32.     if (OtherActor && OtherActor->ActorHasTag(OpenForTag))
  33.     {
  34.         TriggeringActorCount++;
  35.  
  36.         if (!bIsTriggered)
  37.         {
  38.             HandleDerivateOverlapBegin(OverlappedComp, OtherActor, OtherComp, OtherBodyIndex, bFromSweep, SweepResult);
  39.             SetTrigger(true);
  40.         }
  41.     }
  42. }
  43.  
  44. void UTriggerComponent::OnOverlapEnd(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex)
  45. {
  46.     if (bIsTriggered && OtherActor && OtherActor->ActorHasTag(OpenForTag))
  47.     {
  48.         TriggeringActorCount--;
  49.    
  50.         if (TriggeringActorCount == 0 && bIsTriggered)
  51.         {
  52.             HandleDerivateOverlapEnd(OverlappedComp, OtherActor, OtherComp, OtherBodyIndex);
  53.             SetTrigger(false);
  54.         }
  55.     }
  56. }
  57.  
  58. void UTriggerComponent::HandleDerivateOverlapBegin(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult)
  59. {
  60. }
  61.  
  62. void UTriggerComponent::HandleDerivateOverlapEnd(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex)
  63. {
  64. }
  65.  
  66. void UTriggerComponent::SetTrigger(bool bNewState)
  67. {
  68.     bIsTriggered = bNewState;
  69.  
  70.     if (TargetMoverComponent)
  71.     {
  72.         TargetMoverComponent->Trigger(bIsTriggered);
  73.     }
  74. }
  75.  
  76. void UTriggerComponent::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction)
  77. {
  78.     Super::TickComponent(DeltaTime, TickType, ThisTickFunction);
  79.  
  80. }
  81.  
Advertisement
Add Comment
Please, Sign In to add comment