66 lines
2.0 KiB
C++
66 lines
2.0 KiB
C++
// 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
|
|
};
|