5#include "CoreMinimal.h"
7#include "GameFramework/GameStateBase.h"
8#include "WeaponComponent.generated.h"
10class USkeletalMeshComponent;
49UCLASS( ClassGroup=(
Custom), meta=(BlueprintSpawnableComponent) )
50class PROJECTX_API UWeaponComponent :
public UActorComponent
52 GENERATED_UCLASS_BODY()
55 UFUNCTION(BlueprintPure, Category = WeaponComponent)
56 FORCEINLINE
bool IsLocallyControlled()
const {
return GetController() && GetController()->IsLocalController(); }
58 UFUNCTION(BlueprintPure, Category = WeaponComponent)
59 FORCEINLINE
bool IsHoldingAltFire()
const {
return bHoldingAltFire;}
61 UFUNCTION(BlueprintPure, Category = WeaponComponent)
62 FORCEINLINE
bool IsHoldingFire()
const {
return bHoldingFire; }
64 UFUNCTION(BlueprintCallable, Category = WeaponComponent)
65 virtual bool UsesAmmo()
const;
66 UFUNCTION(BlueprintCallable, Category = WeaponComponent)
67 virtual float GetMagAmmo()
const;
68 UFUNCTION(BlueprintCallable, Category = WeaponComponent)
69 virtual float GetReserveAmmo()
const;
70 UFUNCTION(BlueprintCallable, Category = WeaponComponent)
71 virtual bool IsSwitchingWeapons()
const;
73 UFUNCTION(BlueprintCallable, Category = WeaponComponent)
74 TArray<UWeaponInstance*> GetWeaponInventory()
const;
75 UFUNCTION(BlueprintCallable, Category = WeaponComponent)
76 FORCEINLINE
UWeaponInstance* GetWeaponFromIndex(int32 Index)
const {
return WeaponInventory.IsValidIndex(Index) ? WeaponInventory[Index].Get() : NULL; }
77 UFUNCTION(BlueprintCallable, Category = WeaponComponent)
78 UWeaponInstance* GetWeaponFromClass(TSubclassOf<UWeaponInstance> WeaponClass)
const;
79 UFUNCTION(BlueprintCallable, Category = WeaponComponent)
80 FORCEINLINE
UWeaponInstance* GetWeaponFromSlot(
EEquipSlot Slot)
const {
return WeaponInventory.IsValidIndex((uint8)Slot) ? WeaponInventory[(uint8)Slot].Get() : NULL; }
81 UFUNCTION(BlueprintCallable, Category = WeaponComponent)
84 UFUNCTION(BlueprintPure, Category = WeaponComponent)
85 UCameraComponent* GetFirstPersonCamera()
const {
return FPCamera; }
86 void UpdateFirstPersonCamera(UCameraComponent* CameraComponent);
89 T* GetWeaponFromClass()
const {
return Cast<T>(GetWeaponFromClass(T::StaticClass())); }
91 UFUNCTION(BlueprintCallable, Category = WeaponComponent)
93 UFUNCTION(BlueprintCallable, Category = WeaponComponent)
94 FORCEINLINE
UWeaponInstance* GetCurrentWeapon()
const {
return EquippedWeapon.IsValid() ? EquippedWeapon.Get() : NULL; }
96 UFUNCTION(BlueprintPure, Category = WeaponComponent)
97 virtual float GetWeaponSpread()
const;
98 UFUNCTION(BlueprintPure, Category = WeaponComponent)
99 virtual float GetReticleSpreadMultiplier()
const;
101 virtual bool CanPlayAnimations1P()
const;
102 virtual bool CanPlayAnimations3P()
const;
104 UFUNCTION(BlueprintCallable, Category = WeaponComponent)
105 FORCEINLINE USkeletalMeshComponent* GetMesh1P()
const {
return Mesh1P; }
106 UFUNCTION(BlueprintCallable, Category = WeaponComponent)
107 FORCEINLINE USkeletalMeshComponent* GetMesh3P()
const {
return Mesh3P; }
109 UFUNCTION(BlueprintCallable, Category = WeaponComponent)
110 FORCEINLINE USkeletalMeshComponent* GetWeaponMesh1P()
const {
return WeaponMesh1P; }
111 UFUNCTION(BlueprintCallable, Category = WeaponComponent)
112 FORCEINLINE USkeletalMeshComponent* GetWeaponMesh3P()
const {
return WeaponMesh3P; }
114 UFUNCTION(BlueprintCallable, Category = WeaponComponent)
117 UFUNCTION(BlueprintCallable, Category = WeaponComponent)
118 virtual bool IsCurrentWeaponByClass(TSubclassOf<UWeaponInstance>
Weapon)
const;
119 FORCEINLINE
bool GetCanFire() {
return bCanFire; }
121 UFUNCTION(BlueprintCallable, Category = WeaponComponent)
122 virtual float GetAmmoPickupMultiplier()
const {
return AmmoPickupMultiplier;}
123 virtual void UpdateAmmoPickUpMultiplier(
float NewPickupMultiplier) { AmmoPickupMultiplier = NewPickupMultiplier; }
126 UFUNCTION(BlueprintCallable, Category = WeaponComponent)
127 virtual void CosmeticPrimaryFire()
const { OnWeaponStartFire.Broadcast(0); }
129 class AController* GetController()
const;
130 class ACharacter* GetPlayerCharacter()
const;
132 virtual void ChargedFire(uint8 Index);
134 virtual void FireIfAvailable();
136 void UpdateCanFire(
bool bNewCanFire);
139 virtual void SetupPlayerInputComponent(UInputComponent* PlayerInputComponent);
141 virtual void BeginPlay()
override;
142 virtual void EndPlay(
const EEndPlayReason::Type EndPlayReason)
override;
143 UFUNCTION(BlueprintCallable)
144 virtual UWeaponInstance* AddWeapon(TSubclassOf<UWeaponInstance> WeaponClass,
EEquipSlot Slot,
bool bIsPartOfBatch =
false);
145 virtual void RemoveWeapon(TSubclassOf<UWeaponInstance> WeaponClass);
147 virtual void ForceWeaponInventoryCheck();
148 virtual void IncrementBlockSemaphore();
149 virtual void DecrementBlockSemaphore();
151 template<u
int8 Index>
157 virtual void RemoveAllWeapons();
159 void WeaponAutoFire();
161 virtual
void StartVehicleAbility();
163 virtual
void StopVehicleAbility();
165 virtual
void UseVehicleAbility();
169 UFUNCTION(
Server, Reliable, WithValidation)
171 UFUNCTION(BlueprintCallable)
172 virtual
void EquipWeapon(
UWeaponInstance*
Weapon,
bool bCanUnequipExclusive = false,
bool bForce = false);
175 virtual
void EquipPreviousWeapon(
bool bCanUnequipExclusive = false);
177 virtual
void UnEquipComplete();
179 virtual
void OwnerDied();
181 virtual
void OnRep_WeaponInventory();
183 virtual
void OnFOVSettingChanged(const
float Delta);
184 virtual
void ToggleWeaponActive(
bool bNewActiveState,
UWeaponInstance* WeaponClass);
186 UFUNCTION(BlueprintCallable, Category = WeaponComponent)
187 virtual
void CancelWeaponActions();
188 UFUNCTION(BlueprintCallable, Category = WeaponComponent)
189 virtual
void CancelInputConstrainedWeaponActions();
191 UFUNCTION(BlueprintCallable, Category = "
Damage")
192 FORCEINLINE
float GetDamageModifier()
const {
return DamageModifier; }
194 void UpdateDamageModifier(
float NewModifier);
195 void UpdateWeaponSpreadMultiplier(
float NewMultiplier);
199 UPROPERTY(BlueprintAssignable, Category =
"Weapon Events")
200 FWeaponAddedSignature OnWeaponAdded;
201 UPROPERTY(BlueprintAssignable, Category = "
Weapon Events")
202 FWeaponRemovedSignature OnWeaponRemoved;
203 UPROPERTY(BlueprintAssignable, Category = "
Weapon Events")
204 FWeaponEquippedSignature OnWeaponEquipped;
205 UPROPERTY(BlueprintAssignable, Category = "
Weapon Events")
206 FWeaponSkinsChangedSignature OnWeaponSkinsChanged;
207 UPROPERTY(BlueprintAssignable, Category = "
Weapon Events")
208 FWeaponErrorSignature OnWeaponError;
209 UPROPERTY(BlueprintAssignable, Category = "
Weapon Events")
210 FWeaponAnimationSignature OnTightAimStart;
211 UPROPERTY(BlueprintAssignable, Category = "
Weapon Events")
212 FWeaponAnimationSignature OnTightAimStop;
213 UPROPERTY(BlueprintAssignable, Category = "
Weapon Events")
214 FWeaponAmmoChangeSignature OnAmmoChanged;
215 UPROPERTY(BlueprintAssignable, Category = "
Weapon Events")
216 FWeaponAmmoChangeSignature OnAmmoReserveChanged;
217 UPROPERTY(BlueprintAssignable, Category = "
Weapon Events")
218 FReloadEventSignature OnReloadStart;
219 UPROPERTY(BlueprintAssignable, Category = "
Weapon Events")
220 FReloadEventSignature OnReloadStop;
221 UPROPERTY(BlueprintAssignable, Category = "
Weapon Events")
222 FWeaponAnimationSignature OnFiringStart;
223 UPROPERTY(BlueprintAssignable, Category = "
Weapon Events")
224 FWeaponAnimationSignature OnFiringStop;
226 UPROPERTY(BlueprintAssignable)
227 FDeployableSpawnedSignature OnDeployableSpawned;
228 UPROPERTY(BlueprintAssignable)
229 FDeployableDestroyedSignature OnDeployableDestroyed;
231 UPROPERTY(BlueprintAssignable)
232 FLockedOnSignature OnLockOnStart;
233 UPROPERTY(BlueprintAssignable)
234 FLockedOnSignature OnLockedOn;
235 UPROPERTY(BlueprintAssignable)
236 FLockOnSignature OnLockOnLost;
237 UPROPERTY(BlueprintAssignable)
238 FLockOnSignature OnLockOnStopped;
239 UPROPERTY(BlueprintAssignable)
240 FLockOnStrengthChangedSignature OnLockOnStrengthChanged;
242 UPROPERTY(BlueprintAssignable)
243 FWeaponFireSignature OnWeaponStartFire;
244 UPROPERTY(BlueprintAssignable)
245 FWeaponFireSignature OnWeaponAutoFire;
246 UPROPERTY(BlueprintAssignable)
247 FWeaponFireSignature OnWeaponStopFire;
248 UPROPERTY(BlueprintAssignable)
249 FWeaponFireSignature OnWeaponChargedFire;
250 UPROPERTY(BlueprintAssignable)
251 FWeaponFireSignature OnWeaponShotFired;
252 UPROPERTY(BlueprintAssignable)
253 FWeaponReloadSignature OnWeaponReload;
254 UPROPERTY(BlueprintAssignable)
255 FPersonalVehicleEventSignature OnPersonalVehicleInputEvent;
258 UPROPERTY(EditDefaultsOnly,Category =
Vehicle, Config)
259 float PersonalVehicleHoldTriggerTimeDefault = 0.2;
261 UPROPERTY(EditDefaultsOnly, Category =
Jetpack = "Character|Camera")
262 class UCurveFloat* FOVOffsetControlCurve = NULL;
263 float FoundWeaponAmmoBonus = 0.0f;
265 UFUNCTION(
Server, Reliable, WithValidation)
266 virtual
void Server_Reliable_EquipWeapon(
UWeaponInstance*
Weapon,
bool bCanUnequipExclusive = false);
269 virtual
void QuickWeaponSwitch();
271 virtual
void QuickWeaponSwitchPrevious();
273 virtual
void CycleWeapon(
bool bReverse = false);
275 virtual
void OnRep_EquippedWeapon();
277 template<int32 Index>
279 void Fire(int32 Index);
281 template<
int32 Index>
282 void FireReleased() { FireReleased(Index); }
283 void FireReleased(int32 Index);
287 UPROPERTY(ReplicatedUsing = OnRep_EquippedWeapon)
288 TWeakObjectPtr<UWeaponInstance> EquippedWeapon = NULL;
294 UPROPERTY(ReplicatedUsing = OnRep_WeaponInventory)
300 USkeletalMeshComponent* Mesh1P;
302 USkeletalMeshComponent* Mesh3P;
304 USkeletalMeshComponent* WeaponMesh1P;
306 USkeletalMeshComponent* WeaponMesh3P;
310 class UCameraComponent* FPCamera;
313 float DamageModifier = 1.0f;
315 float AmmoPickupMultiplier = 1.0f;
317 float WeaponSpreadMultiplier = 1.0f;
320 mutable AController* Controller;
321 mutable ACharacter* PlayerCharacter;
323 FTimerHandle PVHoldTimer;
325 UPROPERTY(Replicated)
326 bool bCanFire = true;
328 bool bHoldingAltFire = false;
330 bool bHoldingFire = false;
333 UPROPERTY(Replicated)
334 uint8 InputBlockSemaphore = 0;
EEquipSlot
Definition: PlayerStructs.h:25
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FPersonalVehicleEventSignature, bool, bHold, float, HoldDuration)
EWeaponError
Definition: WeaponComponent.h:15
@ CantFireWhileSwitchingWeapons
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FWeaponErrorSignature, EWeaponError, Error)
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FWeaponRemovedSignature)
Definition: Deployable.h:47
Definition: WeaponInstance.h:220
friend class UWeaponComponent
Definition: WeaponInstance.h:1197
Definition: WeaponInstanceProjectile.h:36