// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "Components/GameStateComponent.h" #include "LyraTeamCreationComponent.generated.h" class ULyraExperienceDefinition; class ALyraTeamPublicInfo; class ALyraTeamPrivateInfo; class ALyraPlayerState; class AGameModeBase; class APlayerController; class ULyraTeamDisplayAsset; UCLASS(Blueprintable) class ULyraTeamCreationComponent : public UGameStateComponent { GENERATED_BODY() public: ULyraTeamCreationComponent(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get()); //~UObject interface #if WITH_EDITOR virtual EDataValidationResult IsDataValid(TArray& ValidationErrors) override; #endif //~End of UObject interface //~UActorComponent interface virtual void BeginPlay() override; //~End of UActorComponent interface private: void OnExperienceLoaded(const ULyraExperienceDefinition* Experience); protected: // List of teams to create (id to display asset mapping, the display asset can be left unset if desired) UPROPERTY(EditDefaultsOnly, Category = Teams) TMap> TeamsToCreate; UPROPERTY(EditDefaultsOnly, Category=Teams) TSubclassOf PublicTeamInfoClass; UPROPERTY(EditDefaultsOnly, Category=Teams) TSubclassOf PrivateTeamInfoClass; #if WITH_SERVER_CODE protected: virtual void ServerCreateTeams(); virtual void ServerAssignPlayersToTeams(); /** Sets the team ID for the given player state. Spectator-only player states will be stripped of any team association. */ virtual void ServerChooseTeamForPlayer(ALyraPlayerState* PS); private: void OnPostLogin(AGameModeBase* GameMode, AController* NewPlayer); void ServerCreateTeam(int32 TeamId, ULyraTeamDisplayAsset* DisplayAsset); /** returns the Team ID with the fewest active players, or INDEX_NONE if there are no valid teams */ int32 GetLeastPopulatedTeamID() const; #endif };