97 lines
2.6 KiB
C++
97 lines
2.6 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#pragma once
|
|
|
|
#include "CoreMinimal.h"
|
|
#include "GameFramework/Actor.h"
|
|
#include "Engine/DataTable.h"
|
|
#include "Engine/StaticMesh.h"
|
|
#include "ShooterPickup.generated.h"
|
|
|
|
class USphereComponent;
|
|
class UPrimitiveComponent;
|
|
class AShooterWeapon;
|
|
|
|
/**
|
|
* Holds information about a type of weapon pickup
|
|
*/
|
|
USTRUCT(BlueprintType)
|
|
struct FWeaponTableRow : public FTableRowBase
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
/** Mesh to display on the pickup */
|
|
UPROPERTY(EditAnywhere)
|
|
TSoftObjectPtr<UStaticMesh> StaticMesh;
|
|
|
|
/** Weapon class to grant on pickup */
|
|
UPROPERTY(EditAnywhere)
|
|
TSubclassOf<AShooterWeapon> WeaponToSpawn;
|
|
};
|
|
|
|
/**
|
|
* Simple shooter game weapon pickup
|
|
*/
|
|
UCLASS(abstract)
|
|
class FIRST_API AShooterPickup : public AActor
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
/** Collision sphere */
|
|
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="Components", meta = (AllowPrivateAccess = "true"))
|
|
USphereComponent* SphereCollision;
|
|
|
|
/** Weapon pickup mesh. Its mesh asset is set from the weapon data table */
|
|
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="Components", meta = (AllowPrivateAccess = "true"))
|
|
UStaticMeshComponent* Mesh;
|
|
|
|
protected:
|
|
|
|
/** Data on the type of picked weapon and visuals of this pickup */
|
|
UPROPERTY(EditAnywhere, Category="Pickup")
|
|
FDataTableRowHandle WeaponType;
|
|
|
|
/** Type to weapon to grant on pickup. Set from the weapon data table. */
|
|
TSubclassOf<AShooterWeapon> WeaponClass;
|
|
|
|
/** Time to wait before respawning this pickup */
|
|
UPROPERTY(EditAnywhere, Category="Pickup", meta = (ClampMin = 0, ClampMax = 120, Units = "s"))
|
|
float RespawnTime = 4.0f;
|
|
|
|
/** Timer to respawn the pickup */
|
|
FTimerHandle RespawnTimer;
|
|
|
|
public:
|
|
|
|
/** Constructor */
|
|
AShooterPickup();
|
|
|
|
protected:
|
|
|
|
/** Native construction script */
|
|
virtual void OnConstruction(const FTransform& Transform) override;
|
|
|
|
/** Gameplay Initialization*/
|
|
virtual void BeginPlay() override;
|
|
|
|
/** Gameplay cleanup */
|
|
virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override;
|
|
|
|
/** Handles collision overlap */
|
|
UFUNCTION()
|
|
virtual void OnOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult);
|
|
|
|
protected:
|
|
|
|
/** Called when it's time to respawn this pickup */
|
|
void RespawnPickup();
|
|
|
|
/** Passes control to Blueprint to animate the pickup respawn. Should end by calling FinishRespawn */
|
|
UFUNCTION(BlueprintImplementableEvent, Category="Pickup", meta = (DisplayName = "OnRespawn"))
|
|
void BP_OnRespawn();
|
|
|
|
/** Enables this pickup after respawning */
|
|
UFUNCTION(BlueprintCallable, Category="Pickup")
|
|
void FinishRespawn();
|
|
};
|