LEAP Documentation 40220
Documentation for the LEAP project
WeaponInstanceBeam.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"
7#include "WeaponInstanceBeam.generated.h"
8
13class UAfflictionInstance;
14
15DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FBeamWeaponEventSignature, uint8, Mode);
16DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FBeamTargetSignature, AActor*, BeamTarget);
17
18UCLASS()
19class PROJECTX_API UWeaponInstanceBeam : public UWeaponInstanceRanged
20{
21 GENERATED_UCLASS_BODY()
22public:
23 virtual void BeginPlay() override;
24 virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override;
25 virtual bool Equip() override;
26 virtual bool UnEquip(bool bForce = false) override;
27 virtual bool CanFire(EWeaponError& ErrorMessage, uint8 Mode) const override;
28 virtual bool Fire(uint8 Mode = 0, float WorldTimeOverride = -1.f) override;
29 virtual void FireComplete(uint8 Mode = 0) override;
30 virtual void FireReleased(uint8 Mode = 0) override;
31 virtual void OwnerDied() override;
32 virtual bool IsValidTargetingActor(AActor* PotentialTarget) const;
33protected:
34 virtual void TickComponent(float DeltaTime, enum ELevelTick TickType, FActorComponentTickFunction *ThisTickFunction) override;
35 virtual void ToggleActorFinder(bool bIsOn);
36 virtual void TickTargetAcquire();
37 virtual void TickTargetMaintain(uint8 Mode);
38 virtual void OnTargetTeamChange(uint8 Mode);
39 virtual void OnTargetHoverStart(AActor* HoveredTarget);
40 virtual void OnTargetHoverStop(bool bForceStop = false);
41 virtual void OnTargetHoverTeamChange(AActor* HoveredTarget);
42 virtual void BeamToTargetStart(uint8 Mode, AActor* Target, FHitResult TargetHitResult);
43 virtual void BeamToTargetStop(uint8 Mode);
44
45 //When the trigger is pressed but there isn't any available target, we'll locally play a cosmetic event to display we're searching for a valid target
46 UFUNCTION(BlueprintImplementableEvent)
47 void K2_SearchingForTarget();
48
49 UFUNCTION(BlueprintNativeEvent)
50 AActor* FindBeamHoveringActor();
51
52 TSubclassOf <UAfflictionInstance> GetAfflictionForTarget(TWeakObjectPtr<AActor> Target) const;
53
54 UFUNCTION(Server, Reliable, WithValidation)
55 void Server_BeamToTargetStart(uint8 Mode, AActor* Target, FHitResult TargetHitResult);
56 UFUNCTION(Server, Reliable, WithValidation)
57 void Server_BeamToTargetStop(uint8 Mode);
58 UFUNCTION()
59 virtual void OnRep_BeamTargetActor();
60 UFUNCTION()
61 virtual void OnRep_IsBeaming();
62
63 /* The affliction the beam of this weapon will apply on friendly units */
64 UPROPERTY(EditDefaultsOnly, Category = "Weapon|Beam")
65 TSubclassOf <UAfflictionInstance> AfflictionToApplyFriendlies = NULL;
66 /* The affliction the beam of this weapon will apply on neutral units */
67 UPROPERTY(EditDefaultsOnly, Category = "Weapon|Beam")
68 TSubclassOf <UAfflictionInstance> AfflictionToApplyNeutral = NULL;
69 /* The affliction the beam of this weapon will apply on enemy units */
70 UPROPERTY(EditDefaultsOnly, Category = "Weapon|Beam")
71 TSubclassOf <UAfflictionInstance> AfflictionToApplyEnemies = NULL;
72 /* Does this beam weapon uses an actor as its target */
73 UPROPERTY(EditDefaultsOnly, Category="Weapon|Beam")
74 bool bUsesTargetActor = false;
75 /* Maximum angle allowed in order to not break the beam (Enemy) */
76 UPROPERTY(EditDefaultsOnly, Category = "Weapon|Beam")
77 float MaxEnemyBeamAngle = 60.0f;
78 /* Maximum angle allowed in order to not break the beam (Friendly + Neutral) */
79 UPROPERTY(EditDefaultsOnly, Category = "Weapon|Beam")
80 float MaxFriendlyBeamAngle = 360.0f;
81 /* Does not having line of sight of the target break the beam? (Enemy) */
82 UPROPERTY(EditDefaultsOnly, Category = "Weapon|Beam")
83 bool bLineOfSightBreaksEnemyBeam = false;
84 /* Does not having line of sight of the target break the beam? (Friendly + Neutral) */
85 UPROPERTY(EditDefaultsOnly, Category = "Weapon|Beam")
86 bool bLineOfSightBreaksFriendlyBeam = false;
87 UPROPERTY(ReplicatedUsing = OnRep_IsBeaming)
88 bool bIsBeaming = false;
89 /* Maximum range the desired target actor can be in order to be acquired */
90 UPROPERTY(EditDefaultsOnly, Category = "Weapon|Beam", meta = (EditCondition = "bUsesTargetActor"))
91 float TargetAcquireMaxRange = 300.f;
92 /* Maximum range the desired enemy target actor can be in order to be acquired */
93 UPROPERTY(EditDefaultsOnly, Category = "Weapon|Beam", meta = (EditCondition = "bUsesTargetActor"))
94 float EnemyTargetAcquireMaxRange = 150.f;
95 /* List of valid targeting classes*/
96 UPROPERTY(EditDefaultsOnly, Category = "Weapon|Beam", meta = (EditCondition = "bUsesTargetActor"))
97 TArray<TSubclassOf<AActor>> ValidTargetingActors;
98 /* Maximum range the player can be from the target to maintain the beam */
99 UPROPERTY(EditDefaultsOnly, Category = "Weapon|Beam", meta = (EditCondition = "bUsesTargetActor"))
100 float TargetMaintainMaxRange = 3000.f;
101 /* Maximum range the player can be from the enemy target to maintain the beam */
102 UPROPERTY(EditDefaultsOnly, Category = "Weapon|Beam", meta = (EditCondition = "bUsesTargetActor"))
103 float EnemyTargetMaintainMaxRange = 1500.f;
104 UPROPERTY(ReplicatedUsing = OnRep_BeamTargetActor, BlueprintReadOnly, Category = "Weapon|Beam", meta = (EditCondition = "bUsesTargetActor"))
105 TWeakObjectPtr<AActor> BeamTargetActor = NULL;
106 TWeakObjectPtr<AActor> BeamHoveringActor = NULL;
107 TWeakObjectPtr<UAfflictionInstance> InstancedAffliction = NULL;
108 FHitResult TargetAcquiredHitResult;
109 int32 TargetActorTeam = INDEX_NONE;
110 int32 HoverActorTeam = INDEX_NONE;
111
112 UPROPERTY(BlueprintAssignable)
113 FBeamWeaponEventSignature OnBeamStart;
114 UPROPERTY(BlueprintAssignable)
115 FBeamWeaponEventSignature OnBeamEnd;
116 UPROPERTY(BlueprintAssignable)
117 FBeamTargetSignature OnBeamTargetInRange;
118 UPROPERTY(BlueprintAssignable)
119 FBeamTargetSignature OnBeamTargetInRangeLost;
120 UPROPERTY(BlueprintAssignable)
121 FBeamTargetSignature OnBeamTargetAcquired;
122 UPROPERTY(BlueprintAssignable)
123 FBeamTargetSignature OnBeamTargetTeamChanged;
124
125private:
126 float MaxEnemyBeamAngleCache = 0.0f;
127 float MaxFriendlyBeamAngleCache = 0.0f;
128};
EWeaponError
Definition: WeaponComponent.h:15
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FBeamWeaponEventSignature, uint8, Mode)
Definition: WeaponInstanceBeam.h:20
Definition: WeaponInstanceRanged.h:27