haxis/Source/UnrealProject/Spawners/KOTHSpawnerBase.h

71 lines
2.2 KiB
C++

// Project Lab - NHTV Igad
#pragma once
#include "Spawners/CreatureSpawn.h"
#include "KOTHSpawnerBase.generated.h"
/**
*
*/
UCLASS()
class UNREALPROJECT_API AKOTHSpawnerBase : public ACreatureSpawn
{
GENERATED_BODY()
public:
AKOTHSpawnerBase(const FObjectInitializer& init);
void BeginPlay() override;
void Tick(float DeltaTime) override;
// Overrided capture camp behaviour
virtual void CaptureCamp(int team) override;
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOnBeginCapture);
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnEndCapture, int32, targetTeam);
UFUNCTION(BlueprintImplementableEvent, Category = "KOTH Spawner")
void OnBeginCaptureCamp();
UFUNCTION(BlueprintImplementableEvent, Category = "KOTH Spawner")
void OnEndCaptureCamp(int32 targetTeam);
UPROPERTY(BlueprintAssignable)
FOnBeginCapture onBeginCapture;
UPROPERTY(BlueprintAssignable)
FOnEndCapture onEndCapture;
UFUNCTION(BlueprintCallable, Category = "KOTH Spawner")
bool IsContested(int32 targetTeam) const;
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnCampCaptured, int32, targetTeam);
UPROPERTY(BlueprintAssignable, Category = "Game")
FOnCampCaptured onCampCaptured;
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Capture Particle")
UParticleSystemComponent* captureParticle;
UPROPERTY(BlueprintReadOnly, Category = "KOTH Spawner Properties")
bool beingCaptured;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "KOTH Spawner Properties")
float captureRadius;
// The duration the camp is captured for
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "KOTH Spawner Properties")
float captureTime;
// The time it takes to capture a camp
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "KOTH Spawner Properties")
float possesionTime;
class AKOTHBossSpawner* bossSpawner;
protected:
// Handle to start the capture process
void m_OnCampCleared() override;
// Called when a camp is no longer contested and should be captured by the target team
UFUNCTION(NetMulticast, Reliable)
void m_ExeCaptureCamp(int32 targetTeam);
float m_captureTimer;
float m_possesionTimer;
int m_currentTeam;
bool m_reset;
};