#pragma once #include "CoreMinimal.h" #include "UObject/NoExportTypes.h" #include "UObject/NoExportTypes.h" #include "GameFramework/Actor.h" #include "GameplayTagContainer.h" #include "GameplayTagAssetInterface.h" #include "GameplayTagContainer.h" #include "DelegateEventDelegate.h" #include "ProgressChangedSigDelegate.h" #include "StageCompleteSigDelegate.h" #include "Templates/SubclassOf.h" #include "GameEvent.generated.h" class AEventStarterButton; class AProceduralSetup; class ARessuplyPod; class UChildActorComponent; class UDebrisPositioning; class UDialogDataAsset; UCLASS(Blueprintable) class FSD_API AGameEvent : public AActor, public IGameplayTagAssetInterface { GENERATED_BODY() public: UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) FDelegateEvent EventTriggeredDelegate; UPROPERTY(BlueprintAssignable, BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) FDelegateEvent EventFinishedDelegate; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) FStageCompleteSig StageCompleteDelegate; UPROPERTY(BlueprintAssignable, BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) FProgressChangedSig ProgressChangedDelegate; UPROPERTY(BlueprintAssignable, BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) FProgressChangedSig OnProgressBarChanged; UPROPERTY(BlueprintAssignable, BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) FProgressChangedSig TimeProgressChanged; UPROPERTY(BlueprintAssignable, BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) FStageCompleteSig ObjectivesPerStageChanged; protected: UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) TArray StarterObjects; UPROPERTY(BlueprintReadWrite, EditAnywhere, Transient, meta=(AllowPrivateAccess=true)) bool bGameEventSetup; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) FText EventName; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) FText ObjectiveText; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) FName AnalyticsName; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) FGameplayTagContainer GameplayTags; UPROPERTY(BlueprintReadWrite, EditAnywhere, Instanced, meta=(AllowPrivateAccess=true)) UChildActorComponent* StartEventObject; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) UDialogDataAsset* EventTriggeredShout; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) UDialogDataAsset* EventFinishedShout; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) UDialogDataAsset* EventFailedShout; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float EventTriggeredShoutDelay; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float EventFinishedShoutDelay; UPROPERTY(BlueprintReadWrite, EditAnywhere, Transient, ReplicatedUsing=OnRep_StageProgress, meta=(AllowPrivateAccess=true)) float StageProgress; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float TimeLimit; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float DelayUITime; UPROPERTY(BlueprintReadWrite, EditAnywhere, ReplicatedUsing=OnRep_ObjectivesPerStage, meta=(AllowPrivateAccess=true)) int32 objectivesPerStage; UPROPERTY(BlueprintReadWrite, EditAnywhere, Transient, ReplicatedUsing=OnRep_IsEventStartersActive, meta=(AllowPrivateAccess=true)) bool EventStartersActive; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) bool StopScriptedWavesWhileActive; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) bool StopNormalWavesWhileActive; UPROPERTY(BlueprintReadWrite, EditAnywhere, Transient, ReplicatedUsing=OnRep_EventStarted, meta=(AllowPrivateAccess=true)) bool EventStarted; UPROPERTY(BlueprintReadWrite, EditAnywhere, Transient, ReplicatedUsing=OnRep_FailedEvent, meta=(AllowPrivateAccess=true)) bool FailedEvent; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) bool ShowRemainingTimeOnHUD; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) bool ShowScoreStatusOnHUD; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) bool ShowProgressBar; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float ProgressBarPct; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) bool SkipEventStarters; private: UPROPERTY(BlueprintReadWrite, EditAnywhere, Transient, ReplicatedUsing=OnRep_EventParticipants, meta=(AllowPrivateAccess=true)) TArray EventParticipants; public: AGameEvent(); virtual void GetLifetimeReplicatedProps(TArray& OutLifetimeProps) const override; protected: UFUNCTION(BlueprintCallable) void TrySetupGameEvent(); public: UFUNCTION(BlueprintAuthorityOnly, BlueprintCallable) void TriggerEvent(); protected: UFUNCTION(BlueprintCallable) void StartShout(); public: UFUNCTION(BlueprintAuthorityOnly, BlueprintCallable) void StageObjectiveCompleted(); UFUNCTION(BlueprintAuthorityOnly, BlueprintCallable) ARessuplyPod* SpawnEventPod(TSubclassOf podClass, const FVector& aSpawnLocation, int32 Delay); UFUNCTION(BlueprintAuthorityOnly, BlueprintCallable) AActor* SpawnEventActor(TSubclassOf eventActorClass, const FTransform& aSpawnLocation); UFUNCTION(BlueprintAuthorityOnly, BlueprintCallable) void SetStageProgress(float Progress); UFUNCTION(BlueprintCallable) void SetProgressBarPct(float InPct); UFUNCTION(BlueprintAuthorityOnly, BlueprintCallable) void SetObjectivesPerStage(int32 NewObjectivesPerStage); protected: UFUNCTION(BlueprintCallable) void RemoveParticipant(AActor* participant); UFUNCTION(BlueprintCallable) void OnStarterObjectUsed(AEventStarterButton* eventStarter); public: UFUNCTION(BlueprintCallable, BlueprintImplementableEvent) void OnStageProgress(float Progress); UFUNCTION(BlueprintCallable, BlueprintImplementableEvent) void OnStageComplete(int32 Stage); protected: UFUNCTION(BlueprintCallable) void OnRep_StageProgress(); public: UFUNCTION(BlueprintCallable) void OnRep_ObjectivesPerStage(); protected: UFUNCTION(BlueprintCallable) void OnRep_IsEventStartersActive(); UFUNCTION(BlueprintCallable) void OnRep_FailedEvent(); UFUNCTION(BlueprintCallable) void OnRep_EventStarted(); UFUNCTION(BlueprintCallable) void OnRep_EventParticipants(); public: UFUNCTION(BlueprintCallable, BlueprintImplementableEvent) void OnEventTriggered(); UFUNCTION(BlueprintCallable, BlueprintImplementableEvent) void OnEventFinished(bool eventSuccess); UFUNCTION(BlueprintCallable, BlueprintImplementableEvent) void OnEventBooted(); UFUNCTION(BlueprintCallable, BlueprintPure) bool IsEventCompleted() const; UFUNCTION(BlueprintCallable, BlueprintPure) bool IsEventActive() const; UFUNCTION(BlueprintCallable, BlueprintPure) float GetStageProgress() const; UFUNCTION(BlueprintCallable, BlueprintPure) bool GetShowTimeOnHUD() const; UFUNCTION(BlueprintCallable, BlueprintPure) bool GetShowScoreOnHUD() const; UFUNCTION(BlueprintCallable, BlueprintPure) bool GetShowProgressBar() const; UFUNCTION(BlueprintCallable, BlueprintPure) FText GetObjectiveText() const; UFUNCTION(BlueprintCallable, BlueprintPure) int32 GetObjectivesPerStage() const; UFUNCTION(BlueprintCallable, BlueprintPure) FText GetEventName() const; UFUNCTION(BlueprintCallable, BlueprintPure) bool GetEventFailed() const; UFUNCTION(BlueprintCallable, BlueprintPure) float GetDelayUITime() const; protected: UFUNCTION(BlueprintCallable) void EndShout(); public: UFUNCTION(BlueprintCallable) FTransform DebreePositionPoint(AProceduralSetup* Setup, const FVector& fromLocation, float MinDistance, float desiredDistance, UDebrisPositioning* DebrisPositioning, TSubclassOf terrainPlacement, float maxPathLength); UFUNCTION(BlueprintCallable) void BootUpEvent(); UFUNCTION(BlueprintAuthorityOnly, BlueprintCallable) void AddStageProgress(float progressToAdd); // Fix for true pure virtual functions not being implemented UFUNCTION(BlueprintCallable) bool HasMatchingGameplayTag(FGameplayTag TagToCheck) const override PURE_VIRTUAL(HasMatchingGameplayTag, return false;); UFUNCTION(BlueprintCallable) bool HasAnyMatchingGameplayTags(const FGameplayTagContainer& TagContainer) const override PURE_VIRTUAL(HasAnyMatchingGameplayTags, return false;); UFUNCTION(BlueprintCallable) bool HasAllMatchingGameplayTags(const FGameplayTagContainer& TagContainer) const override PURE_VIRTUAL(HasAllMatchingGameplayTags, return false;); UFUNCTION(BlueprintCallable) void GetOwnedGameplayTags(FGameplayTagContainer& TagContainer) const override PURE_VIRTUAL(GetOwnedGameplayTags,); };