RealtimeStyleTransferRuntime/Source/LyraGame/Player/LyraPlayerSpawningManagerCo...

63 lines
2.0 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "Components/GameStateComponent.h"
#include "GameFramework/OnlineReplStructs.h"
#include "LyraPlayerSpawningManagerComponent.generated.h"
class AController;
class APlayerController;
class APlayerState;
class APlayerStart;
class ALyraPlayerStart;
class AActor;
/**
* @class ULyraPlayerSpawningManagerComponent
*/
UCLASS()
class LYRAGAME_API ULyraPlayerSpawningManagerComponent : public UGameStateComponent
{
GENERATED_BODY()
public:
ULyraPlayerSpawningManagerComponent(const FObjectInitializer& ObjectInitializer);
/** UActorComponent */
virtual void InitializeComponent() override;
virtual void TickComponent(float DeltaTime, enum ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override;
/** ~UActorComponent */
protected:
// Utility
APlayerStart* GetFirstRandomUnoccupiedPlayerStart(AController* Controller, const TArray<ALyraPlayerStart*>& FoundStartPoints) const;
virtual AActor* OnChoosePlayerStart(AController* Player, TArray<ALyraPlayerStart*>& PlayerStarts) { return nullptr; }
virtual void OnFinishRestartPlayer(AController* Player, const FRotator& StartRotation) { }
UFUNCTION(BlueprintImplementableEvent, meta=(DisplayName=OnFinishRestartPlayer))
void K2_OnFinishRestartPlayer(AController* Player, const FRotator& StartRotation);
private:
/** We proxy these calls from ALyraGameMode, to this component so that each experience can more easily customize the respawn system they want. */
AActor* ChoosePlayerStart(AController* Player);
bool ControllerCanRestart(AController* Player);
void FinishRestartPlayer(AController* NewPlayer, const FRotator& StartRotation);
friend class ALyraGameMode;
/** ~ALyraGameMode */
UPROPERTY(Transient)
TArray<TWeakObjectPtr<ALyraPlayerStart>> CachedPlayerStarts;
private:
void OnLevelAdded(ULevel* InLevel, UWorld* InWorld);
void HandleOnActorSpawned(AActor* SpawnedActor);
#if WITH_EDITOR
APlayerStart* FindPlayFromHereStart(AController* Player);
#endif
};