63 lines
2.0 KiB
C
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
|
||
|
};
|