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

A class representing a projectile-based weapon framework. More...

#include <ProjectileWeaponFramework.h>

Inheritance diagram for AProjectileWeaponFramework:
AWeaponFramework IWeapon

Public Member Functions

 AProjectileWeaponFramework ()
 
virtual void ServerShoot () override
 
- Public Member Functions inherited from AWeaponFramework
 AWeaponFramework ()
 

Protected Member Functions

virtual void BeginPlay () override
 
virtual void Aiming (bool bIsAiming) override
 
virtual void LockOnTarget ()
 
- Protected Member Functions inherited from AWeaponFramework
virtual void SetupWeaponEffects ()
 
void LogDebugMessage (const FString &Message, const bool bError=false) const
 
void Server_InitWeapon ()
 
virtual void InitWeapon () override
 
virtual void Fire (const FVector Location, const FRotator Rotation, const AActor *ActorToIgnore, const float Accuracy) override
 
virtual void Reload (const float ReloadTime) override
 
virtual void CancelReload () override
 
virtual void SwitchAutoMode () override
 
virtual void BlindFireWeapon (const FVector Location, const FRotator Rotation, const AActor *ActorToIgnore, const float Accuracy) override
 
virtual void AddAttachment (const FString &AttachmentID) override
 
virtual void ToggleAttachment (const EAttachmentType &AttachmentType) override
 
virtual void MoveUMG (bool bIsRightShoulder) override
 
virtual FWeaponData_T GetWeaponData () const override
 
virtual FWeaponStats_T GetWeaponStats () const override
 
virtual EWeaponType GetWeaponType () const override
 
virtual EWeaponFireMode GetFireMode () const override
 
virtual FTransform GetPivotPoint () const override
 
virtual FTransform GetAimDownSightSocket () const override
 
virtual float GetWeaponFOV () const override
 
virtual bool IsClipEmpty () const override
 
virtual void SetWeaponData (const FWeaponData_T NewWeaponData) override
 
virtual void SetWeaponShouldAutoReload (const bool bValue) override
 
virtual void SetWeaponMesh (USkeletalMesh *SkeletalMesh) override
 
virtual void SetMuzzleOffset (const FVector &Location, const FRotator &Rotation) override
 
virtual void SetRecoilPivotPoint (const FVector &Location, const FRotator &Rotation) override
 
virtual void SetWeaponMeshHidden (const bool bValue) override
 
void Multicast_SetWeaponMeshHidden (const bool bValue)
 
virtual void SetDebuggingStats (const bool bDebug, const bool bInfinite, const bool bBottomless) override
 
virtual void ToggleLaser (const bool bForceOff=false)
 
void ReceiveFire (FHitResult Hit, APawn *InstigatorPawn)
 
TArray< FWeaponModifiersGetAllWeaponAttachmentModifiers () const
 
TArray< FWeaponAttachmentGetAllWeaponAttachments () const
 
FWeaponAttachment GetWeaponAttachment (const FString &AttachmentID) const
 
bool RemoveAttachment (const FString AttachmentID, const EAttachmentType AttachmentType)
 
void RemoveAllAttachments ()
 
bool CanShoot () const
 
float GetAccuracyMultiplier () const
 
void ApplyDamageToActor (const FHitResult &Hit, FVector ShotDirection, float Multiplier=1.0f)
 
void ServerFire (const FVector Location, const FRotator Rotation, const AActor *ActorToIgnore, const float Accuracy)
 
void ServerSetReloading (const bool bReloading)
 
void ServerReload ()
 
virtual void Server_SetWeaponShouldAutoReload (const bool bValue)
 
void CalculateBulletSpread (FVector &NewBulletSpread) const
 
virtual float CalculateDistanceDamage (const float Distance) const
 
virtual FHitResult BlindFireWeaponTrace (const float Accuracy, const AActor *ActorToIgnore=nullptr)
 
virtual bool LineTrace (FHitResult &Hit, FVector &ShotDirection, const FLinearColor &Color=FLinearColor::Green, const FVector &CustomLineEnd=FVector::ZeroVector) const
 
void OnMeshReplicated ()
 
void OnRep_WeaponStats ()
 

Protected Attributes

TSubclassOf< class AProjectileBaseProjectile
 
- Protected Attributes inherited from AWeaponFramework
UHitscanWeaponComponent * HitscanWeaponComponent
 
UProjectileWeaponComponent * ProjectileWeaponComponent
 
FVector TraceLocation
 
FRotator TraceRotation
 
const AActor * TraceActorToIgnore
 
TArray< AActor * > ActorsToIgnore
 
APawn * OwnerPawn
 
FWeaponData_T WeaponData
 
EWeaponType WeaponType = EWeaponType::Default
 
USceneComponent * SceneRoot
 
USkeletalMeshComponent * GunMeshComponent
 
USceneComponent * Muzzle
 
USceneComponent * RecoilPivotPoint
 
TArray< UStaticMeshComponent * > AttachmentComponents
 
class UWeaponEffectsComponent * WeaponEffects
 
USkeletalMesh * WeaponMesh
 
TSubclassOf< class AActor > ProjectileClass
 

Private Attributes

USceneComponent * HomingTarget = nullptr
 
FTimerHandle HomingTimerHandle
 
float CurrentLockOn = 0.0f
 
AActor * LockOnTargetActor = nullptr
 

Additional Inherited Members

- Public Attributes inherited from AWeaponFramework
bool bDebuggingMode = false
 
bool bInfiniteAmmo = false
 
bool bBottomlessClip = false
 
float DrawDebugTime = 2.0f
 
float DrawDebugColorDarkMultiplier = 0.1f
 
float DrawDebugColorLightMultiplier = 2.0f
 
float DrawDebugPointSize = 16.0f
 
FLinearColor MainTraceColor = FLinearColor(0.9f, 0.1f, 0.1f)
 
FLinearColor BlindFireTraceColor = FLinearColor(0.1f, 0.9f, 0.1f)
 
bool bTraceComplex = false
 
bool bReturnPhysicalMaterial = false
 
float TraceDistanceTooClose = 0.075f
 

Detailed Description

A class representing a projectile-based weapon framework.

This class inherits from AWeaponFramework and provides functionality for projectile-based weapons.

See also
ProjectileWeaponFramework
AWeaponFramework

Constructor & Destructor Documentation

◆ AProjectileWeaponFramework()

AProjectileWeaponFramework::AProjectileWeaponFramework ( )
14{
16 //@TODO Have subclass, for throwables?
17}
EWeaponType WeaponType
Definition WeaponFramework.h:178

Member Function Documentation

◆ Aiming()

void AProjectileWeaponFramework::Aiming ( bool bIsAiming)
overrideprotectedvirtual

Reimplemented from AWeaponFramework.

80{
81 Super::Aiming(bIsAiming);
82 if(GetWeaponStats().IsValid() && GetWeaponStats().WeaponProjectileStats.bHasHoming)
83 {
84 CurrentLockOn = 0.0f;
85 if(bIsAiming)
86 {
87 //@TODO these numbers:
88 GetWorld()->GetTimerManager().SetTimer(HomingTimerHandle, this, &AProjectileWeaponFramework::LockOnTarget, 1.0f, true, GetWeaponStats().WeaponProjectileStats.InitialLockOnDelay);
89
90 UE_LOG(LogWeaponSystem,Warning, TEXT("Projectile Weapon Aiming"));
91 }
92 else
93 {
94 GetWorld()->GetTimerManager().ClearTimer(HomingTimerHandle);
95 }
96 }
97}
float CurrentLockOn
Definition ProjectileWeaponFramework.h:50
FTimerHandle HomingTimerHandle
Definition ProjectileWeaponFramework.h:48
virtual void LockOnTarget()
Definition ProjectileWeaponFramework.cpp:100
virtual FWeaponStats_T GetWeaponStats() const override
Definition WeaponFramework.cpp:900

◆ BeginPlay()

void AProjectileWeaponFramework::BeginPlay ( )
overrideprotectedvirtual

Reimplemented from AWeaponFramework.

70{
71 Super::BeginPlay();
72
73}

◆ LockOnTarget()

void AProjectileWeaponFramework::LockOnTarget ( )
protectedvirtual
101{
102 if(GetWeaponStats().IsValid() == false || GetWeaponStats().WeaponProjectileStats.bHasHoming == false)
103 {
104 GetWorld()->GetTimerManager().ClearTimer(HomingTimerHandle);
105 return;
106 }
107 //TODO linetrace to target,
108 FHitResult HitResult;
109 FVector StartLocation;
110 FVector EndLocation;
111 float Radius = 100.0f;
112
113
114 const bool bSuccess = UKismetSystemLibrary::SphereTraceSingle(
115 this,
116 StartLocation, EndLocation, Radius,
117 UEngineTypes::ConvertToTraceType(ECC_GameTraceChannel4),
118 false,
121 HitResult,
122 true
123 );
124 if(bSuccess)
125 {
126 if(HitResult.GetActor() != nullptr)
127 {
128 //check each time to see if its the same
129 if(HitResult.GetActor() == LockOnTargetActor)
130 {
131 //@Todo add lock-on Amount
132 CurrentLockOn += 1.0f;
133 if(bDebuggingMode){UE_LOG(LogWeaponSystem,Warning, TEXT("Locking on: %f"), CurrentLockOn);}
134
135 if(CurrentLockOn >= GetWeaponStats().WeaponProjectileStats.LockOnTime)
136 {
137 if(bDebuggingMode){UE_LOG(LogWeaponSystem,Warning, TEXT("Locked On"));}
138 //FireWeapon
139 }
140 }
141 // else if
142 // ILockOnTarget* LockOnActor = Cast<ILockOnTarget>(HitResult.GetActor());
143 // if(LockOnActor)
144 {
145
146 }
147 }
148 }
149 else
150 {
151
152 }
153 // LockonTarget == nullptr
154 //ALockOnTarget* LockOnTarget = Cast<ILockOnTarget>(Hit.Actor)
155 //if(LockOnTarget != nullptr)
156}
AActor * LockOnTargetActor
Definition ProjectileWeaponFramework.h:52
bool bDebuggingMode
Definition WeaponFramework.h:35
TArray< AActor * > ActorsToIgnore
Definition WeaponFramework.h:170
static EDrawDebugTrace::Type GetDrawDebugType(const bool bDebuggingMode)
Definition BaseHelpersBPLib.cpp:910

◆ ServerShoot()

void AProjectileWeaponFramework::ServerShoot ( )
overridevirtual

Reimplemented from AWeaponFramework.

20{
21 // if(!CanShoot()) {return;}
22 // if(GetWeaponStats().IsValid() == false){return;}
23 // ActorsToIgnore.Emplace(GetOwner());
24 // if(bBottomlessClip){WeaponData.CurrentAmmo++;}
25 // WeaponData.CurrentAmmo--;
26 // const FVector MuzzleLocation = Muzzle->GetComponentLocation();
27 // const FActorSpawnParameters SpawnParameters;
28 // const FTransform SpawnTransform = FTransform(TraceRotation + GetWeaponStats().ProjectileRotationOffset, MuzzleLocation, FVector(1));
29 // AActor* SpawnedProjectile = UGameplayStatics::BeginDeferredActorSpawnFromClass(this, Projectile, SpawnTransform, ESpawnActorCollisionHandlingMethod::AlwaysSpawn, this);
30 // if(SpawnedProjectile == nullptr){UE_LOG(LogWeaponSystem, Warning,TEXT("Spawn Projectile failed in Projectile Weapon"));return;}
31 // AProjectileBase* NewProjectile = Cast<AProjectileBase>(SpawnedProjectile);
32 // if(NewProjectile == nullptr){UE_LOG(LogWeaponSystem, Warning,TEXT("Projectile cast failed in Projectile Weapon"));return;}
33 // NewProjectile->ProjectileStats = GetWeaponStats().WeaponProjectileStats;
34 // NewProjectile->DefaultDamage = GetWeaponStats().DefaultDamage;
35 // NewProjectile->DamageActorsToIgnore = ActorsToIgnore;
36 //
37 // // NewProjectile->DamageType = GetWeaponStats().DamageType;
38 // NewProjectile->bDebuggingMode = bDebuggingMode;
39 // if(GetOwner() != nullptr)
40 // {
41 // NewProjectile->SetOwner(GetOwner());
42 // }
43 // else
44 // {
45 // UE_LOG(LogWeaponSystem, Error, TEXT("Projectile weapon, GetOwner FAILED"));
46 // }
47 //
48 // AController* EventInstigator = nullptr;
49 // if(TraceActorToIgnore != nullptr)
50 // {
51 // EventInstigator = TraceActorToIgnore->GetInstigatorController();
52 // }
53 // NewProjectile->InstigatorController = EventInstigator;
54 // UGameplayStatics::FinishSpawningActor(SpawnedProjectile, SpawnTransform);
55 //
56 // //- Weapon Effects //
57 // OwnerPawn = Cast<APawn>(GetOwner());
58 // if(OwnerPawn != nullptr)
59 // {
60 // WeaponEffects->MuzzleFlashEvent(GetWeaponStats().MuzzleFlashOffset);
61 // FHitResult HitResult;
62 // ReceiveFire(HitResult, OwnerPawn);
63 // }
64 // APlayerController* OwnerController = Cast<APlayerController>(OwnerPawn->GetController());
65 // WeaponEffects->PlayFeedbackEffects(OwnerController, WeaponData.FireMode, GetAccuracyMultiplier());
66 // WeaponEffects->WeaponFireNoiseEvent();
67}

Member Data Documentation

◆ CurrentLockOn

float AProjectileWeaponFramework::CurrentLockOn = 0.0f
private

◆ HomingTarget

USceneComponent* AProjectileWeaponFramework::HomingTarget = nullptr
private

◆ HomingTimerHandle

FTimerHandle AProjectileWeaponFramework::HomingTimerHandle
private

◆ LockOnTargetActor

AActor* AProjectileWeaponFramework::LockOnTargetActor = nullptr
private

◆ Projectile

TSubclassOf<class AProjectileBase> AProjectileWeaponFramework::Projectile
protected

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