-
Notifications
You must be signed in to change notification settings - Fork 0
/
TriggerComponent.cpp
47 lines (47 loc) · 1.33 KB
/
TriggerComponent.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include "TriggerComponent.h"
UTriggerComponent::UTriggerComponent()
{
PrimaryComponentTick.bCanEverTick = true;
}
void UTriggerComponent::BeginPlay()
{
Super::BeginPlay();
}
void UTriggerComponent::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction)
{
Super::TickComponent(DeltaTime, TickType, ThisTickFunction);
AActor* Actor = GetAcceptableActor();
if (Actor != nullptr)
{
UPrimitiveComponent* Component = Cast<UPrimitiveComponent>(Actor->GetRootComponent());
if(Component != nullptr)
{
Component->SetSimulatePhysics(false);
}
Actor->AttachToComponent(this, FAttachmentTransformRules::KeepWorldTransform);
Mover->SetShouldMove(true);
}
else
{
Mover->SetShouldMove(false);
}
}
void UTriggerComponent::SetMover(UMover* NewMover)
{
Mover = NewMover;
}
AActor* UTriggerComponent::GetAcceptableActor() const
{
TArray<AActor*> Actors;
GetOverlappingActors(Actors);
for (AActor* Actor : Actors)
{
bool HasAcceptableTag = Actor->ActorHasTag(AcceptableActorTag);
bool IsGrabbed = Actor->ActorHasTag("Grabbed");
if (HasAcceptableTag && !IsGrabbed)
{
return Actor;
}
}
return nullptr;
}