/
InteractableObject.cpp
70 lines (53 loc) · 2.29 KB
/
InteractableObject.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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
// Fill out your copyright notice in the Description page of Project Settings.
#include "Survival.h"
#include "InteractableObject.h"
#include "SurvivalCharacter.h"
#include "Inventory.h"
// Sets default values
AInteractableObject::AInteractableObject()
{
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = false;
InteractableObjectStaticMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Interactable Object Mesh"));
InteractableObjectStaticMesh->SetupAttachment(RootComponent);
InteractableObjectStaticMesh->SetSimulatePhysics(true);
IsInteracted = false;
}
void AInteractableObject::BeginPlay()
{
Super::BeginPlay();
}
void AInteractableObject::Tick( float DeltaTime )
{
Super::Tick( DeltaTime );
}
bool AInteractableObject::GetIsInteracted()
{
return IsInteracted;
}
void AInteractableObject::SetIsInteracted(bool newIsInteracted)
{
IsInteracted = newIsInteracted;
}
void AInteractableObject::SetPhysicsEnabled()
{
ACharacter* PlayerCharacter = UGameplayStatics::GetPlayerCharacter(GetWorld(), 0);
ASurvivalCharacter* SurvivalCharacter = Cast<ASurvivalCharacter>(PlayerCharacter);
FVector CameraForwardVector = SurvivalCharacter->GetFirstPersonCamera()->GetForwardVector();
this->InteractableObjectStaticMesh->SetSimulatePhysics(true);
this->InteractableObjectStaticMesh->AddForce(CameraForwardVector);
GetWorld()->GetTimerManager().ClearTimer(InteractableObjectTimerHandler);
}
void AInteractableObject::Use() {}
void AInteractableObject::Drop()
{
ACharacter* PlayerCharacter = UGameplayStatics::GetPlayerCharacter(GetWorld(), 0);
ASurvivalCharacter* SurvivalCharacter = Cast<ASurvivalCharacter>(PlayerCharacter);
FVector StartPoint = SurvivalCharacter->GetFirstPersonCamera()->GetComponentLocation();
FVector CameraForwardVector = SurvivalCharacter->GetFirstPersonCamera()->GetForwardVector();
this->SetActorEnableCollision(true);
this->SetActorHiddenInGame(false);
this->SetActorLocation(StartPoint + CameraForwardVector * 4);
SurvivalCharacter->GetPlayerInventory()->RemoveFromInventory(this);
GetWorld()->GetTimerManager().SetTimer(InteractableObjectTimerHandler, this, &AInteractableObject::SetPhysicsEnabled, 0.001f);
}