108 lines
3.7 KiB
C++
108 lines
3.7 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#pragma once
|
|
|
|
#include "CoreMinimal.h"
|
|
#include "GameFramework/Actor.h"
|
|
#include "GameplayTagContainer.h"
|
|
#include "LyraWeaponSpawner.generated.h"
|
|
|
|
class ULyraInventoryItemDefinition;
|
|
class ULyraWeaponPickupDefinition;
|
|
class UCapsuleComponent;
|
|
class UStaticMeshComponent;
|
|
|
|
UCLASS(Blueprintable,BlueprintType)
|
|
class LYRAGAME_API ALyraWeaponSpawner : public AActor
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
public:
|
|
// Sets default values for this actor's properties
|
|
ALyraWeaponSpawner();
|
|
|
|
protected:
|
|
// Called when the game starts or when spawned
|
|
virtual void BeginPlay() override;
|
|
virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override;
|
|
|
|
public:
|
|
// Called every frame
|
|
virtual void Tick(float DeltaTime) override;
|
|
|
|
void OnConstruction(const FTransform& Transform) override;
|
|
|
|
protected:
|
|
//Data asset used to configure a Weapon Spawner
|
|
UPROPERTY(EditInstanceOnly, BlueprintReadOnly, Category = "Lyra|WeaponPickup")
|
|
ULyraWeaponPickupDefinition* WeaponDefinition;
|
|
|
|
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, ReplicatedUsing = OnRep_WeaponAvailability, Category = "Lyra|WeaponPickup")
|
|
bool bIsWeaponAvailable;
|
|
|
|
//The amount of time between weapon pickup and weapon spawning in seconds
|
|
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Lyra|WeaponPickup")
|
|
float CoolDownTime;
|
|
|
|
//Delay between when the weapon is made available and when we check for a pawn standing in the spawner. Used to give the bIsWeaponAvailable OnRep time to fire and play FX.
|
|
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Lyra|WeaponPickup")
|
|
float CheckExistingOverlapDelay;
|
|
|
|
//Used to drive weapon respawn time indicators 0-1
|
|
UPROPERTY(BlueprintReadOnly, Transient, Category = "Lyra|WeaponPickup")
|
|
float CoolDownPercentage;
|
|
|
|
public:
|
|
|
|
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Lyra|WeaponPickup")
|
|
UCapsuleComponent* CollisionVolume;
|
|
|
|
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Lyra|WeaponPickup")
|
|
UStaticMeshComponent* PadMesh;
|
|
|
|
UPROPERTY(BlueprintReadOnly, Category = "Lyra|WeaponPickup")
|
|
UStaticMeshComponent* WeaponMesh;
|
|
|
|
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "Lyra|WeaponPickup")
|
|
float WeaponMeshRotationSpeed;
|
|
|
|
FTimerHandle CoolDownTimerHandle;
|
|
|
|
FTimerHandle CheckOverlapsDelayTimerHandle;
|
|
|
|
UFUNCTION()
|
|
void OnOverlapBegin(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepHitResult);
|
|
|
|
//Check for pawns standing on pad when the weapon is spawned.
|
|
void CheckForExistingOverlaps();
|
|
|
|
UFUNCTION(BlueprintNativeEvent)
|
|
void AttemptPickUpWeapon(APawn* Pawn);
|
|
|
|
UFUNCTION(BlueprintImplementableEvent, Category = "Lyra|WeaponPickup")
|
|
bool GiveWeapon(TSubclassOf<ULyraInventoryItemDefinition> WeaponItemClass, APawn* ReceivingPawn);
|
|
|
|
void StartCoolDown();
|
|
|
|
UFUNCTION(BlueprintCallable, Category = "Lyra|WeaponPickup")
|
|
void ResetCoolDown();
|
|
|
|
UFUNCTION()
|
|
void OnCoolDownTimerComplete();
|
|
|
|
void SetWeaponPickupVisibility(bool bShouldBeVisible);
|
|
|
|
UFUNCTION(BlueprintNativeEvent, Category = "Lyra|WeaponPickup")
|
|
void PlayPickupEffects();
|
|
|
|
UFUNCTION(BlueprintNativeEvent, Category = "Lyra|WeaponPickup")
|
|
void PlayRespawnEffects();
|
|
|
|
UFUNCTION()
|
|
void OnRep_WeaponAvailability();
|
|
|
|
/** Searches an item definition type for a matching stat and returns the value, or 0 if not found */
|
|
UFUNCTION(BlueprintCallable, BlueprintPure, Category = "Lyra|WeaponPickup")
|
|
static int32 GetDefaultStatFromItemDef(const TSubclassOf<ULyraInventoryItemDefinition> WeaponItemClass, FGameplayTag StatTag);
|
|
};
|