Space Plunder
Loading...
Searching...
No Matches
AWeaponPickupPad Class Reference

This class represents a weapon pickup pad in the game. More...

#include <WeaponPickupPad.h>

Inheritance diagram for AWeaponPickupPad:

Public Member Functions

 AWeaponPickupPad ()
 
virtual void OnConstruction (const FTransform &Transform) override
 
virtual void Tick (float DeltaTime) override
 
void OnOverlapBegin (UPrimitiveComponent *OverlappedComponent, AActor *OtherActor, UPrimitiveComponent *OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult &SweepHitResult)
 
void CheckForExistingOverlaps ()
 
void AttemptPickUpWeapon (APawn *Pawn)
 
void OnRep_WeaponAvailability ()
 

Protected Member Functions

virtual void BeginPlay () override
 
void StartCoolDown ()
 
void ResetCoolDown ()
 
void OnCoolDownTimerComplete ()
 
void SetWeaponPickupVisibility (bool bShouldBeVisible)
 
void PlayPickupEffects ()
 
void PlayRespawnEffects ()
 

Protected Attributes

TObjectPtr< UCapsuleComponent > CollisionVolume
 
USceneComponent * RootSceneComponent
 
TObjectPtr< UStaticMeshComponent > PadMesh
 
TObjectPtr< USkeletalMeshComponent > WeaponMesh
 
FWeaponData_T WeaponDefinition
 
bool bIsWeaponAvailable
 
float CoolDownTime
 
float CheckExistingOverlapDelay
 
float CoolDownPercentage
 
float WeaponMeshRotationSpeed
 
FTimerHandle CoolDownTimerHandle
 
FTimerHandle CheckOverlapsDelayTimerHandle
 

Detailed Description

This class represents a weapon pickup pad in the game.

Weapons can be spawned on these pads and picked up by players. Players can pick the weapon up again after a cooldown.

See also
WeaponPickupPad

Constructor & Destructor Documentation

◆ AWeaponPickupPad()

AWeaponPickupPad::AWeaponPickupPad ( )
11{
12 PrimaryActorTick.bCanEverTick = true;
13 RootComponent = CollisionVolume = CreateDefaultSubobject<UCapsuleComponent>(TEXT("CollisionVolume"));
14 CollisionVolume->InitCapsuleSize(80.f, 80.f);
15 CollisionVolume->OnComponentBeginOverlap.AddDynamic(this, &AWeaponPickupPad::OnOverlapBegin);
16
17 PadMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("PadMesh"));
18 PadMesh->SetupAttachment(RootComponent);
19
20 WeaponMesh = CreateDefaultSubobject<USkeletalMeshComponent>(TEXT("WeaponMesh"));
21 WeaponMesh->SetupAttachment(RootComponent);
22
24 CoolDownTime = 30.0f;
26 bIsWeaponAvailable = true;
27 bReplicates = true;
28}
float WeaponMeshRotationSpeed
Definition WeaponPickupPad.h:72
TObjectPtr< USkeletalMeshComponent > WeaponMesh
Definition WeaponPickupPad.h:53
TObjectPtr< UStaticMeshComponent > PadMesh
Definition WeaponPickupPad.h:51
TObjectPtr< UCapsuleComponent > CollisionVolume
Definition WeaponPickupPad.h:47
void OnOverlapBegin(UPrimitiveComponent *OverlappedComponent, AActor *OtherActor, UPrimitiveComponent *OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult &SweepHitResult)
Definition WeaponPickupPad.cpp:67
float CoolDownTime
Definition WeaponPickupPad.h:63
bool bIsWeaponAvailable
Definition WeaponPickupPad.h:60
float CheckExistingOverlapDelay
Definition WeaponPickupPad.h:66

Member Function Documentation

◆ AttemptPickUpWeapon()

void AWeaponPickupPad::AttemptPickUpWeapon ( APawn * Pawn)

◆ BeginPlay()

void AWeaponPickupPad::BeginPlay ( )
overrideprotectedvirtual
46{
47 Super::BeginPlay();
48 if(WeaponMesh->GetSkeletalMeshAsset() == nullptr)
49 {
50 UE_LOG(LogWeaponSystem, Error, TEXT("'%s' does not have a valid weapon definition! Make sure to set this data on the instance!"), *GetNameSafe(this));
51 }
52}

◆ CheckForExistingOverlaps()

void AWeaponPickupPad::CheckForExistingOverlaps ( )
78{
79 TArray<AActor*> OverlappingActors;
80 GetOverlappingActors(OverlappingActors, APawn::StaticClass());
81
82 for (AActor* OverlappingActor : OverlappingActors)
83 {
84 AttemptPickUpWeapon(Cast<APawn>(OverlappingActor));
85 }
86}
void AttemptPickUpWeapon(APawn *Pawn)

◆ OnConstruction()

void AWeaponPickupPad::OnConstruction ( const FTransform & Transform)
overridevirtual
31{
33 {
34 bool bSuccess = false;
35 USkeletalMesh* MeshForPickup = UWeaponBPLib::GetWeaponMesh(this, WeaponDefinition.WeaponID, bSuccess);
36 if(bSuccess && MeshForPickup != nullptr)
37 {
38 WeaponMesh->SetSkeletalMeshAsset(MeshForPickup);
39 }
40 WeaponMesh->SetRelativeLocation(WeaponDefinition.WeaponOffset);
41 // WeaponMesh->SetRelativeRotation(WeaponDefinition.RotationOffset);
42 }
43}
FWeaponData_T WeaponDefinition
Definition WeaponPickupPad.h:57
static USkeletalMesh * GetWeaponMesh(const UObject *WorldContextObject, const FString &WeaponID, bool &bSuccess, UDataTable *DataTable=nullptr)
Definition WeaponBPLib.cpp:298
FString WeaponID
Definition WeaponStructs.h:866
bool IsValid() const
Definition WeaponStructs.h:896
FVector WeaponOffset
Definition WeaponStructs.h:972

◆ OnCoolDownTimerComplete()

void AWeaponPickupPad::OnCoolDownTimerComplete ( )
protected
142{
144}
void ResetCoolDown()
Definition WeaponPickupPad.cpp:118

◆ OnOverlapBegin()

void AWeaponPickupPad::OnOverlapBegin ( UPrimitiveComponent * OverlappedComponent,
AActor * OtherActor,
UPrimitiveComponent * OtherComp,
int32 OtherBodyIndex,
bool bFromSweep,
const FHitResult & SweepHitResult )
69{
70 APawn* OverlappingPawn = Cast<APawn>(OtherActor);
71 if (GetLocalRole() == ROLE_Authority && bIsWeaponAvailable && OverlappingPawn != nullptr)
72 {
73 AttemptPickUpWeapon(OverlappingPawn);
74 }
75}

◆ OnRep_WeaponAvailability()

void AWeaponPickupPad::OnRep_WeaponAvailability ( )
188{
190 {
193 }
194 else
195 {
199 }
200}
void PlayPickupEffects()
void PlayRespawnEffects()
void SetWeaponPickupVisibility(bool bShouldBeVisible)
Definition WeaponPickupPad.cpp:146
void StartCoolDown()
Definition WeaponPickupPad.cpp:110

◆ PlayPickupEffects()

void AWeaponPickupPad::PlayPickupEffects ( )
protected

◆ PlayRespawnEffects()

void AWeaponPickupPad::PlayRespawnEffects ( )
protected

◆ ResetCoolDown()

void AWeaponPickupPad::ResetCoolDown ( )
protected
119{
120 UWorld* World = GetWorld();
121
122 if (World)
123 {
124 World->GetTimerManager().ClearTimer(CoolDownTimerHandle);
125 }
126
127 if (GetLocalRole() == ROLE_Authority)
128 {
129 bIsWeaponAvailable = true;
132
133 if (World)
134 {
136 }
137 }
138 CoolDownPercentage = 0.0f;
139}
FTimerHandle CoolDownTimerHandle
Definition WeaponPickupPad.h:74
FTimerHandle CheckOverlapsDelayTimerHandle
Definition WeaponPickupPad.h:75
void CheckForExistingOverlaps()
Definition WeaponPickupPad.cpp:77
float CoolDownPercentage
Definition WeaponPickupPad.h:69

◆ SetWeaponPickupVisibility()

void AWeaponPickupPad::SetWeaponPickupVisibility ( bool bShouldBeVisible)
protected
147{
148 WeaponMesh->SetVisibility(bShouldBeVisible, true);
149}

◆ StartCoolDown()

void AWeaponPickupPad::StartCoolDown ( )
protected
111{
112 if (UWorld* World = GetWorld())
113 {
114 World->GetTimerManager().SetTimer(CoolDownTimerHandle, this, &AWeaponPickupPad::OnCoolDownTimerComplete, CoolDownTime);
115 }
116}
void OnCoolDownTimerComplete()
Definition WeaponPickupPad.cpp:141

◆ Tick()

void AWeaponPickupPad::Tick ( float DeltaTime)
overridevirtual
55{
56 Super::Tick(DeltaTime);
57
58 //Update the CoolDownPercentage property to drive respawn time indicators
59 UWorld* World = GetWorld();
60 if(World->GetTimerManager().IsTimerActive(CoolDownTimerHandle))
61 {
62 CoolDownPercentage = 1.0f - World->GetTimerManager().GetTimerRemaining(CoolDownTimerHandle)/CoolDownTime;
63 }
64 WeaponMesh->AddRelativeRotation(FRotator(0.0f, World->GetDeltaSeconds() * WeaponMeshRotationSpeed, 0.0f));
65}

Member Data Documentation

◆ bIsWeaponAvailable

bool AWeaponPickupPad::bIsWeaponAvailable
protected

◆ CheckExistingOverlapDelay

float AWeaponPickupPad::CheckExistingOverlapDelay
protected

◆ CheckOverlapsDelayTimerHandle

FTimerHandle AWeaponPickupPad::CheckOverlapsDelayTimerHandle
protected

◆ CollisionVolume

TObjectPtr<UCapsuleComponent> AWeaponPickupPad::CollisionVolume
protected

◆ CoolDownPercentage

float AWeaponPickupPad::CoolDownPercentage
protected

◆ CoolDownTime

float AWeaponPickupPad::CoolDownTime
protected

◆ CoolDownTimerHandle

FTimerHandle AWeaponPickupPad::CoolDownTimerHandle
protected

◆ PadMesh

TObjectPtr<UStaticMeshComponent> AWeaponPickupPad::PadMesh
protected

◆ RootSceneComponent

USceneComponent* AWeaponPickupPad::RootSceneComponent
protected

◆ WeaponDefinition

FWeaponData_T AWeaponPickupPad::WeaponDefinition
protected

◆ WeaponMesh

TObjectPtr<USkeletalMeshComponent> AWeaponPickupPad::WeaponMesh
protected

◆ WeaponMeshRotationSpeed

float AWeaponPickupPad::WeaponMeshRotationSpeed
protected

The documentation for this class was generated from the following files: