RealtimeStyleTransferRuntime/Source/LyraGame/Teams/LyraTeamCreationComponent.h

66 lines
2.0 KiB
C
Raw Normal View History

2022-05-23 18:41:30 +00:00
// 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<FText>& 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<uint8, TObjectPtr<ULyraTeamDisplayAsset>> TeamsToCreate;
UPROPERTY(EditDefaultsOnly, Category=Teams)
TSubclassOf<ALyraTeamPublicInfo> PublicTeamInfoClass;
UPROPERTY(EditDefaultsOnly, Category=Teams)
TSubclassOf<ALyraTeamPrivateInfo> 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
};