// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "AbilitySystemInterface.h" #include "Engine/EngineTypes.h" #include "Messages/LyraVerbMessage.h" #include "ModularGameState.h" #include "UObject/UObjectGlobals.h" #include "LyraGameState.generated.h" class APlayerState; class UAbilitySystemComponent; class ULyraAbilitySystemComponent; class ULyraExperienceManagerComponent; class UObject; struct FFrame; /** * ALyraGameState * * The base game state class used by this project. */ UCLASS(Config = Game) class LYRAGAME_API ALyraGameState : public AModularGameStateBase, public IAbilitySystemInterface { GENERATED_BODY() public: ALyraGameState(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get()); float GetServerFPS() const { return ServerFPS; } //~AActor interface virtual void PreInitializeComponents() override; virtual void PostInitializeComponents() override; virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override; //~End of AActor interface //~AGameStateBase interface virtual void AddPlayerState(APlayerState* PlayerState) override; virtual void RemovePlayerState(APlayerState* PlayerState) override; //~End of AGameStateBase interface //~IAbilitySystemInterface virtual UAbilitySystemComponent* GetAbilitySystemComponent() const override; //~End of IAbilitySystemInterface UFUNCTION(BlueprintCallable, Category = "Lyra|GameState") ULyraAbilitySystemComponent* GetLyraAbilitySystemComponent() const { return AbilitySystemComponent; } // Send a message that all clients will (probably) get // (use only for client notifications like eliminations, server join messages, etc... that can handle being lost) UFUNCTION(NetMulticast, Unreliable, BlueprintCallable, Category = "Lyra|GameState") void MulticastMessageToClients(const FLyraVerbMessage Message); // Send a message that all clients will be guaranteed to get // (use only for client notifications that cannot handle being lost) UFUNCTION(NetMulticast, Reliable, BlueprintCallable, Category = "Lyra|GameState") void MulticastReliableMessageToClients(const FLyraVerbMessage Message); private: UPROPERTY() TObjectPtr ExperienceManagerComponent; // The ability system component subobject for game-wide things (primarily gameplay cues) UPROPERTY(VisibleAnywhere, Category = "Lyra|GameState") TObjectPtr AbilitySystemComponent; protected: virtual void Tick(float DeltaSeconds) override; protected: UPROPERTY(Replicated) float ServerFPS; };