LEAP Documentation 40220
Documentation for the LEAP project
TurretComponent.h
Go to the documentation of this file.
1// Copyright Blue Isle Studios Inc 2018. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#include "Components/StaticMeshComponent.h"
9#include "TurretComponent.generated.h"
10
12class UAdvancedWidgetComponent;
13class AStaticMeshActor;
15
16DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FTargetFoundSignature, AActor*, Target);
18
19UCLASS()
20class PROJECTX_API UTurretComponent : public UActorComponent , public IOwnedInterface
21{
22 GENERATED_UCLASS_BODY()
23
24public:
25 UFUNCTION(BlueprintPure)
26 FRotator GetTargetingRotation() const;
27 UFUNCTION(BlueprintPure)
28 AActor* GetTarget() const { return Target.Get(); }
29
30 virtual void Deactivate() override;
31 virtual void Activate(bool bReset = false) override;
32
33 UFUNCTION(BlueprintCallable, BlueprintAuthorityOnly)
34 virtual void FireProjectile(const FTransform& TransformStart, bool bRequiresValidTarget = true);
35
36 /* If not overriding GetProjectileTransform, opt to offset from the owner position instead */
37 UPROPERTY(EditDefaultsOnly)
38 FVector ProjectileOffset = FVector::ZeroVector;
39protected:
40 virtual void BeginPlay() override;
41 virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override;
42
43 UPROPERTY(BlueprintAssignable)
44 FTargetFoundSignature OnTargetAcquired;
45 UPROPERTY(BlueprintAssignable)
46 FTargetFoundSignature OnTargetKilled;
47 UPROPERTY(BlueprintAssignable)
48 FFiredSignature OnFired;
49
50 virtual void Fire();
51 virtual void Targeting();
52 virtual void SetTarget(AActor* NewTarget);
53
54 UFUNCTION(BlueprintPure, Category = Turret)
55 FTransform GetProjectileTransform() const;
56
57 TWeakObjectPtr<AActor> Target = NULL;
58 TWeakObjectPtr<AActor> PreviousTarget = NULL;
59
60 UPROPERTY()
61 TArray<AActor*> PotentialTargets;
62
63 FTimerHandle FireDelayTimer;
64 FTimerHandle TargetingDelayTimer;
65 FTimerHandle FireRateTimer;
66
67 /* Contains configuration data used for the projectile, projectile count, fire rate, damage, burst, modifiers etc*/
68 UPROPERTY(EditDefaultsOnly, Category = Turret)
69 TSubclassOf<class UWeaponInstanceProjectile> WeaponInstanceClass = NULL;
70
71 /* Widget to spawn on the owning player when this turret is active */
72 UPROPERTY(EditDefaultsOnly, Category = Turret)
73 TSubclassOf<class UTurretOverlayWidget> TurretWidgetClass = NULL;
74
75 /* Time to wait after acquiring a target from the idle position before firing */
76 UPROPERTY(EditDefaultsOnly, Category = Turret)
77 float TargetAcquiredFireDelay = 1.0f;
78
79 /* Radius of the turrets range*/
80 UPROPERTY(EditDefaultsOnly, Category = Turret)
81 float Range = 15000.0f;
82
83 /* Maximum Angle to target*/
84 UPROPERTY(EditDefaultsOnly, Category = Turret)
85 float TargetingAngle = 45.0f;
86
87 /* Object types to target*/
88 UPROPERTY(EditDefaultsOnly, Category = Turret)
89 TArray <TEnumAsByte<EObjectTypeQuery>> ObjectTypes;
90
91 /* When the turret has no target, should it fetch random targeting directions? (scanning) Limit the range here */
92 UPROPERTY(EditDefaultsOnly, Category = Turret)
93 FVector2D RandomTargetingRotationPitch = FVector2D(-45.0f, 45.0f);
94
95 /* When the turret has no target, should it fetch random targeting directions? (scanning) Limit the range here */
96 UPROPERTY(EditDefaultsOnly, Category = Turret)
97 FVector2D RandomTargetingRotationYaw = FVector2D(0.0f, 360.0f);
98
99 /* Time taken to choose a new random rotation */
100 UPROPERTY(EditDefaultsOnly, Category = Turret)
101 float RandomTargetingRotationDelay = 3.0f;
102
103 UFUNCTION(NetMulticast, Unreliable)
104 void Multicast_OnFired();
105
106private:
107 TWeakObjectPtr<UTurretOverlayWidget> TurretWidget = nullptr;
108 FRotator RandomRotation = FRotator::ZeroRotator;
109 float RandomRotationCounter = 0.0f;
110};
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FTargetFoundSignature, AActor *, Target)
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FFiredSignature)
Definition: ProjectXCharacter.h:128
Definition: OwnedInterface.h:20
Definition: TurretComponent.h:21
Definition: TurretOverlayWidget.h:11
void OnTargetAcquired(AActor *Target)
Definition: WeaponInstanceProjectile.h:36